{$R *.dfm}
procedure tturtle.mitte;
begin
posx:=z.Width div 2;
posy:=z.Height div 2;
dir:=0;
end;
constructor tturtle.create(pb:tpaintbox);
begin
z:=pb;
posx:=0; posy:=0; dir:=0;
pen:=true;
z.refresh;
end;
procedure tturtle.SA;
begin
pen:=true;
end;
procedure tturtle.SH;
begin
pen:=false;
end;
procedure tturtle.dl(d:real);
begin
dir:=dir+d;
if dir > 360 then begin
while dir >360 do Dir:=dir-360;
end
else begin
while dir< 0 do dir:= dir+360;
end;
end;
procedure tturtle.dr(d:real);
begin
DL(-d);
end;
procedure tturtle.vw(d:real);
begin
z.canvas.moveto(trunc(posx),trunc(posy));
posx:=posx+cos(dir/180*pi)*d;
posy:=posy-sin(dir/180*pi)*d;
if pen then z.canvas.lineto (trunc(posx),trunc(posy));
end;
procedure TForm1.EndeClick(Sender: TObject);
begin
close;
end;
procedure zweig (var n,l : integer );
begin
if n=1
then begin
kurve.vw(l);
end
else begin
kurve.DL(60);
zweig (n-1, l/2); // hier ist der fehler!!!
end;
end;
procedure TForm1.zeichnenClick(Sender: TObject);
begin
n:=spinedit1.value;
l:=spinedit2.value;
end;
end.
ist der bisherige quelltext.
und da wo ich es markiert habe, ist der fehler.
wie kommen nicht weiter, kann jemand helfen?
( das programm ist auch noch lang nicht fertig... so nebenbei)
Geändert von distressed (30.01.2007 um 12:33 Uhr).
function arcsin(x:real):real;
begin
arcsin:=arctan(x/sqrt(1-sqr(x)))
end;
function arccos(x:real):real;
begin
arccos:=arctan(sqrt(1-sqr(x))/x);
end;
procedure tturtle.mitte; //turtle kommt in die Mitte vom Bildschirm
begin
posx:=z.width div 2;
posy:=z.Height div 2;
dir:=90;
end;
procedure tturtle.links; //turtle an den linken Rand
begin
posx:=0;
posy:=z.Height div 2;
dir:=0;
end;
procedure tturtle.rechts; //siehe oben
begin
posx:=z.width;
posy:=z.Height div 2;
dir:=180;
end;
procedure tturtle.oben;
begin
posx:=z.width div 2;
posy:=0;
dir:=270;
end;
procedure tturtle.unten;
begin
posx:=z.width div 2;
posy:=z.Height;
dir:=90;
end;
constructor tturtle.create(pb:tpaintbox); //turtle wird erstellt
begin
z:=pb;
posx:=0; posy:=0; dir:=0;
pen:=true;
z.refresh;
end;
procedure tturtle.SA; //Anfang des Zeichnens
begin
if pen=false then
pen:=true;
end;
procedure tturtle.SH; //Ende des Zeichnens
begin
pen:=false;
end;
procedure tturtle.dl(d:real); //linksdrehung
begin
dir:=dir+d;
if dir > 360 then begin
while dir >360 do Dir:=dir-360;
end
else begin
while dir< 0 do dir:= dir+360;
end;
end;
procedure tturtle.dr(d:real); //rechtsdrehung
begin
DL(-d);
end;
procedure tturtle.vw(d:real); //vorwärtsgehen
begin
z.canvas.moveto(trunc(posx),trunc(posy));
posx:=posx+cos(dir/180*pi)*d;
posy:=posy-sin(dir/180*pi)*d;
if pen then z.canvas.lineto (trunc(posx),trunc(posy));
end;
procedure tturtle.setze(x,y,d:integer);
begin
posx:=x;
posy:=y;
dir:=d;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure rek (n: integer ; l: real); //die prozedur zum zeichnen der äste
begin
if n=1
then
begin
kurve.SA;
kurve.DL(60);
kurve.VW(l);
kurve.SH;
kurve.VW(-l);
kurve.Dr(120);
kurve.SA;
kurve.VW(l);
kurve.SH;
kurve.VW(-l);
kurve.dl(60);
end