@hathor: Es ist nicht Sinnvoll, einfach eine Lösung in den Raum reinzuwerfen wenn es darum geht, dass er es auch verstehen muss.
Naja wie dem auch sei.
Du hast da wohl einen kleinen Fehler in deiner Schleife
Bisher hast du ja das hier
Delphi-Quellcode:
var
index,x,xi,yi: integer;
begin
image1.Canvas.moveto(xm,ym);
x:=Anzahl_Punkte mod 2;
for index:=1 to Anzahl_Punkte do
if x=0 then
begin
xi:=trunc (ri*cos(index*winkelstueck));
yi:=trunc (ri*sin(index*winkelstueck));
image1.Canvas.LineTo(xi,yi)
end
else
begin
xi:=trunc (ra*cos(winkelstueck));
yi:=trunc (ra*sin(winkelstueck));
image1.Canvas.lineto(xi,yi);
end;
end;
Nur bleibt für jeden Zacken X = const. D.h. Du hast immer nur gleich lange "Spitzen"
Vllt. solltest du es mit so etwas versuchen
Delphi-Quellcode:
var
i,xi,yi: integer;
begin
xi := trunc (ra*cos(0));
yi := trunc (ra*sin(0));
image1.Canvas.moveto(xi,yi);
winkelstueck := 1/Anzahl_Spitzen * ???;
for i := 0 to Anzahl_Spitzen-1 do
begin
// Spitze zeichnen
xi := trunc (ra*cos(i*winkelstueck)); //Noch falsch
yi := trunc (ra*sin(i*winkelstueck)); //Noch falsch
image1.Canvas.LineTo(xi,yi);
// Gegenstück zur Spitze zeichnen (das ding da was näher am Mittelpunkt liegt xD)
xi := trunc (ri*cos((i+0.5)*winkelstueck)); //Noch falsch
yi := trunc (ri*sin((i+0.5)*winkelstueck)); //Noch falsch
image1.Canvas.lineto(xi,yi);
end;
end;
Beachte das die Berechnung noch nicht korrigiert ist das musst du noch machen (Mittelpunk mit einbeziehen).
EDIT: Im zweiten code bei der Nicht-Spitze wurde auch noch mit Index multipliziert, was bei dir im unteren Teil deines Codes noch gefehlt hat.
MFG