Dragon Curve

RMAG news

A dragon curve is any member of a family of self-similar fractal curves, which can be approximated by recursive methods such as Lindenmayer systems as a procedure in Pascal shows:

procedure Dragon(n, a, t: Integer; d, x, y: Double; var b: TBitmap);
var a1, a2: integer;
begin
if n <= 1 then begin
with b.Canvas do begin
Pen.Color := random(p);
MoveTo(Trunc(x + 0.5), Trunc(y + 0.5));
LineTo(Trunc(x + d * _cos[a] + 0.5), Trunc(y + d * _sin[a] + 0.5));
exit;
end;
end;
d := d * s;
a1 := (a – t) and 7;
a2 := (a + t) and 7;
dragon(n – 1, a1, 1, d, x, y, b);
dragon(n – 1, a2, -1, d, x + d * _cos[a1], y + d * _sin[a1], b);
end;

Recursively a right curling dragon is a right dragon followed by a left dragon, at 90-degree angle. And a left dragon is a left followed by a right. The same you get also with Python and Turtle in maXbox:

Const DRAGFUNC =
‘def dragon(level=4, size=200, direction=45): ‘+LF+
‘ if level: ‘+LF+
‘ right(direction) ‘+LF+
‘ dragon(level-1, size/1.41421356237, 45) ‘+LF+
‘ left(direction * 2) ‘+LF+
‘ dragon(level-1, size/1.41421356237, -45) ‘+LF+
‘ right(direction) ‘+LF+
‘ else: ‘+LF+
‘ forward(size) ‘;

function PyCodeDragonTurtle(imgpath, aAPIKey: string): string;
begin
with TPythonEngine.Create(Nil) do begin
//pythonhome:= ‘C:UsersUserAppDataLocalProgramsPythonPython312’;
try
loadDLL;
autofinalize:= false;
ExecString(‘from turtle import right,left,forward,speed, exitonclick, hideturtle’);
ExecStr(DRAGFUNC);
ExecStr(‘speed(0)’);
//ExecStr(‘hideturtle()’);
ExecStr(‘dragon(6)’);
ExecStr(‘exitonclick()’);
//result:= (EvalStr(‘r.json()’)); *)
except
raiseError;
finally
Free;
end;
end;
end;

The dragon curve is probably most commonly thought of as the shape that is generated from repeatedly folding a strip of paper in half.

The script you get at:
Multilanguage Script

Please follow and like us:
Pin Share