PROCEDURE Dragon(graphic: TurtleGraphics.Graphic;
level: INTEGER);
(* Dragon curve (X -> X+YF+, Y -> -FX-Y) *)
PROCEDURE Left;
BEGIN TurtleGraphics.Left(graphic);
END Left;
PROCEDURE Right;
BEGIN TurtleGraphics.Right(graphic);
END Right;
PROCEDURE Forward;
BEGIN TurtleGraphics.Forward(graphic);
END Forward;
PROCEDURE ^ Y(n: INTEGER);
PROCEDURE X(n: INTEGER);
BEGIN
IF n > 0 THEN
X(n-1); Left; Y(n-1); Forward; Left;
END;
END X;
PROCEDURE Y(n: INTEGER);
BEGIN
IF n > 0 THEN
Right; Forward; X(n-1); Right; Y(n-1);
END;
END Y;
BEGIN Forward; X(level);
END Dragon;
|