hallo erstmal zusammen
also ich habe folgendes problem: ich möchte das sierpinski dreieck mit hilfe der rekursion programmieren.So wie ich es versucht habe funktioniert es allerdings nicht ich kann aber einfach nicht den fehler finden. ich hoffe ihr könnt mir weiterhelfen
Hier ist mein quelltext:
Delphi-Quellcode:
procedure sierpinski (ordnung : Integer; laenge, winkel:Real; a: integer)
var x,y: real;
begin
x := x+laenge*cos(winkel);
y := y-laenge*sin(winkel);
//Form1.PaintBox1.Canvas.LineTo (Round(x),Round(y));
sierpinski (ordnung-1, laenge / 2, winkel,a);
winkel := winkel + 2 * pi / 3;
sierpinski (ordnung-1, laenge / 2, winkel,a);
winkel := winkel - 2 * pi / 3;
sierpinski (ordnung-1, laenge / 2, winkel,a);
winkel := winkel - 2 * pi / 3;
sierpinski (ordnung-1, laenge / 2, winkel,a);
winkel := winkel + 2 * pi / 3;
sierpinski (ordnung-1, laenge / 2, winkel,a);
Inc(a);
Form1.paintbox1.Canvas.LineTo(Round(x),Round(y));
If a < (StrToInt(Form1.Combobox1.Text)) then
sierpinski (ordnung, laenge, winkel,a)
else
exit;
end;
//end;
procedure TForm1.Button1Click(Sender: TObject);
var ordnung : Integer;
x, y, laenge, winkel : Real;
a: Integer;
begin
x := 100;
y := 380;
a:= 0;
refresh;
laenge :=400;
winkel :=0;
ordnung := (StrToInt(ComboBox1.Text));
PaintBox1.Canvas.MoveTo (Round(x), Round(y));
sierpinski (ordnung, laenge, winkel,a);
end;
Erklärung:
procedure siepinski... ist die rekursive Procedure, welche über den Button1 (nach Anglicken) aufgerufen wird. Die stufe des dreieckes (bzw. wie oft die rekursion wiederhohlt werden soll) wird in ComboBox1.Text angegeben.
problem: jedesmal kommt die nur zu bekannte fehlermeldung "Stack- überlauf" d.h. Irgendetwas muss mit der Abbruchbedingung nicht stimmen. ich weiß aber nicht was...
also vielen Dank schon mal für alle Antworten
cu gregor