Ecco un esempio rapido utilizzando un 200x200 PaintBox
- dovrebbe almeno darti un'idea dell'algoritmo. Spero che tu possa disegnare il punto nero nel mezzo. Leggi su Bezier Curves; PolyBezier
definisce cubic Bezier curves. (link)
Quattro punti definiscono una curva di Bezier cubica - inizio, fine, e due punti di controllo. I punti di controllo definiscono l'intensità della curvatura mentre la linea si sposta dall'inizio alla fine.
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;
per soddisfare il punto che si può fare questo con un Bezier:
// 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]);
Non voglio essere scortese, ma non credo che questo ha a che fare con Delphi o GDI in particolare. È più come cercare un algoritmo che richiede tre parametri e restituisce qualcosa come sopra. –
@ GünthertheBeautiful è possibile ma ho bisogno di farlo con Delphi usando GDI e GDI + – Martin
Il punto è che una volta che hai la descrizione matematica, puoi disegnarla in qualsiasi lingua tu voglia. Non è categoricamente una domanda delphi. FWIW Scommetto che Google usa le immagini raster. –