Hier ist ein schnelles Beispiel mit einem 200x200 PaintBox
- es sollte Ihnen zumindest eine Idee für den Algorithmus geben. Ich vertraue darauf, dass du den schwarzen Punkt in der Mitte zeichnen kannst. Lesen Sie weiter unter Bezier Curves; PolyBezier
definiert cubic Bezier curves. (link)
Vier Punkte eine kubische Bezier-Kurve definieren, - Start, Ende und zwei Kontrollpunkte. Kontrollpunkte definieren die Stärke der Krümmung, wenn sich die Linie von Anfang bis Ende bewegt.
var origin, innerL, midL, midR, lft, tp, rgt, innerR : TPoint;
radius, hgt : integer;
begin
radius := 25;
hgt := 90;
origin.X := 100;
origin.Y := 180;
//control points
innerL.X := origin.X;
innerL.Y := origin.Y - (hgt - radius) div 3;
midL.X := origin.X - radius;
midL.Y := origin.Y - 2*((hgt - radius) div 3);
//top circle
lft.X := origin.X - radius;
lft.Y := origin.Y - (hgt - radius);
tp.X := origin.X;
tp.Y := origin.Y - hgt;
rgt.X := origin.X + radius;
rgt.Y := lft.Y;
//control points
midR.X := origin.X + radius;
midR.Y := midL.Y;
innerR.X := origin.X;
innerR.Y := innerL.Y;
PaintBox1.Canvas.Pen.Width := 2;
PaintBox1.Canvas.PolyBezier([origin, innerL, midL, lft]);
PaintBox1.Canvas.Arc(lft.X, tp.Y, rgt.X, rgt.Y + radius, rgt.X, rgt.Y, lft.X, lft.Y);
PaintBox1.Canvas.PolyBezier([rgt, midR, innerR, origin]);
//fill
PaintBox1.Canvas.Brush.Color := clYellow;
PaintBox1.Canvas.FloodFill(origin.X, origin.Y - radius,
Canvas.Pen.Color, TFillStyle.fsBorder);
end;
den Punkt zu vergewissern, dass Sie dies mit einer Bezier tun können:
// add four more control TPoints
cornerL.X := lft.X;
cornerL.Y := tp.Y + radius div 2;
cL2.X := lft.X + radius div 2;
cL2.Y := tp.Y;
cR2.X := rgt.X - radius div 2;
cR2.Y := tp.Y;
cornerR.X := rgt.X;
cornerR.Y := cornerL.Y;
PaintBox1.Canvas.PolyBezier([origin, innerL, midL, lft,
cornerL, cL2, tp, cR2, cornerR, rgt,
midR, innerR, origin]);
Ich will nicht unhöflich sein, aber ich glaube nicht, das irgendetwas mit Delphi oder GDI zu tun bestimmtes. Es ist eher so, als würde man nach einem Algorithmus suchen, der drei Parameter benötigt und so etwas ausgibt. –
@ GünthertheBeautiful es ist möglich, aber ich muss es tun mit Delphi mit GDI und GDI + – Martin
Der Punkt ist, dass sobald Sie die mathematische Beschreibung haben, können Sie es in welcher Sprache Sie Lust haben. Es ist kategorisch keine Delphi-Frage. FWIW Ich wette, dass Google Rasterbilder verwendet. –