53 lines
1.1 KiB
ObjectPascal
53 lines
1.1 KiB
ObjectPascal
uses Turtle,GraphWPF;
|
|
|
|
var
|
|
Atom,FStr,XStr,YStr: string;
|
|
angle,len,x0,y0: real;
|
|
n: integer;
|
|
|
|
procedure Init1; // Dragon
|
|
begin
|
|
(Atom,FStr,XStr,YStr) := ('fx','f','x+yf+','-fx-y');
|
|
(angle,len,n,x0,y0) := (90,3,15,300,450);
|
|
end;
|
|
|
|
procedure Init2; // Koch curve
|
|
begin
|
|
(Atom,FStr,XStr,YStr) := ('F', 'F-F++F-F', '', '');
|
|
(angle,len,n,x0,y0) := (60,5,7,10,550);
|
|
end;
|
|
|
|
procedure Init3; // Quadratic Koch Island
|
|
begin
|
|
(Atom,FStr,XStr,YStr) := ('F+F+F+F', 'F+F-FF+F+F-F', '', '');
|
|
(angle,len,n,x0,y0) := (90,4,4,250,450);
|
|
end;
|
|
|
|
procedure Init4; // Gosper hexagonal curve
|
|
begin
|
|
(Atom,FStr,XStr,YStr) := ('XF', 'F', 'X+YF++YF-FX--FXFX-YF+','-FX+YFYF++YF+FX--FX-Y');
|
|
(angle,len,n,x0,y0) := (60,4,5,580,56);
|
|
end;
|
|
|
|
procedure RunStr(s: string; n: integer);
|
|
begin
|
|
foreach var c in s do
|
|
case c of
|
|
'+': Turn(angle);
|
|
'-': Turn(-angle);
|
|
'f','F': if n>0 then RunStr(FStr,n-1) else Forw(len);
|
|
'x','X': if n>0 then RunStr(XStr,n-1);
|
|
'y','Y': if n>0 then RunStr(YStr,n-1);
|
|
else Print('error')
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
Init4;
|
|
ToPoint(x0,y0);
|
|
SetWidth(0.5);
|
|
//SetColor(Colors.Red);
|
|
Down;
|
|
RunStr(Atom,n);
|
|
Up;
|
|
end. |