RosettaCodeData/Task/Hilbert-curve/XPL0/hilbert-curve.xpl0
2023-07-01 13:44:08 -04:00

35 lines
559 B
Text

def Order=5, Size=15; \length of line segment
int Dir, X, Y;
proc GoFwd;
[case Dir&3 of
0: X:= X+Size;
1: Y:= Y+Size;
2: X:= X-Size;
3: Y:= Y-Size
other [];
Line(X, Y, \white\7);
];
proc Hilbert(Lev, Ang);
int Lev, Ang;
[if Lev then
[Dir:= Dir+Ang;
Hilbert(Lev-1, -Ang);
GoFwd;
Dir:= Dir-Ang;
Hilbert(Lev-1, Ang);
GoFwd;
Hilbert(Lev-1, Ang);
Dir:= Dir-Ang;
GoFwd;
Hilbert(Lev-1, -Ang);
Dir:= Dir+Ang;
];
];
[SetVid($12); \640x480 graphics
Dir:= 0; X:= 0; Y:= 0;
Move(X, Y);
Hilbert(Order, 1);
]