Mit einer aufgeräumten Funktion sieht man mehr!
Folgender Abschnitt entspricht deinen Quellcode, aber ist etwas sauberer und passt sich automatisch der Größe der Image-Komponente an und spart eine Schleife.
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
i,
r2,
xm,
ym,
x,
y,
zacken,
anzahlP : Integer;
winkelschritt,
winkel : double;
begin
xm:= img1.Width div 2; // Mittelpunkt auf Imagefeld
ym:= img1.Height div 2;
if (se1.Value >= 3) then
begin
zacken := se1.Value // Anzahl Zacken wird aus Spinedit gelesen
end
else
begin
zacken := 3;
end;
anzahlP := 2 * Zacken; // Anzahl Punkte ist zweimal Zacken
r2 := ym div 2; // Innenradius von 70 Pixeln
winkelschritt:= 2 * Pi / anzahlP; // Winkelschritt abhängig von Zacken
img1.canvas.pen.color:= clred;
img1.canvas.Ellipse(img1.BoundsRect);
img1.canvas.moveto (xm + r2, ym); // Bewege dich auf Startpunkt des N-Ecks
for i:= 0 to anzahlP do // N-Eck zeichnen mit Radius 70
begin
winkel := winkelschritt * i;
x:= round( xm + r2 * cos(winkel) );
y:= round( ym + r2 * sin(winkel) );
img1.canvas.pen.color:= clgreen;
img1.canvas.lineto(x,y);
end;
end;