Hilbert curve: Difference between revisions
Content added Content deleted
m (Phix/pGUI) |
(Added 4tH example) |
||
Line 728: | Line 728: | ||
|__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__|</pre> |
|__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__|</pre> |
||
=={{header|Forth}}== |
|||
{{trans|Yabasic}} |
|||
{{works with|4tH v3.62}} |
|||
<lang forth>include lib/graphics.4th |
|||
include lib/anstools.4th |
|||
64 constant /width \ hilbert curve order^2 |
|||
9 constant /length \ length of a line |
|||
variable origin \ point of origin |
|||
aka r@ lg \ get parameters from return stack |
|||
aka r'@ i1 \ so define some aliases |
|||
aka r"@ i2 \ to make it a bit more readable |
|||
: origin! 65536 * + origin ! ; ( n1 n2 --) |
|||
: origin@ origin @ 65536 /mod ; ( -- n1 n2) |
|||
: hilbert ( x y lg i1 i2 --) |
|||
>r >r >r lg 1 = if \ if lg equals 1 |
|||
rdrop rdrop rdrop origin@ 2swap \ get point of origin |
|||
/width swap - /length * >r /width swap - /length * r> |
|||
2dup origin! line \ save origin and draw line |
|||
;then |
|||
r> 2/ >r \ divide lg by 2 |
|||
over over i1 lg * tuck + >r + r> lg i1 1 i2 - hilbert |
|||
over over 1 i2 - lg * + swap i2 lg * + swap lg i1 i2 hilbert |
|||
over over 1 i1 - lg * tuck + >r + r> lg i1 i2 hilbert |
|||
i2 lg * + swap 1 i2 - lg * + swap r> 1 r> - r> hilbert |
|||
; |
|||
585 pic_width ! 585 pic_height ! \ set canvas size |
|||
color_image 255 whiteout blue \ paint blue on white |
|||
0 dup origin! \ set point of origin |
|||
0 dup /width over dup hilbert \ hilbert curve, order=8 |
|||
s" ghilbert.ppm" save_image \ save the image |
|||
</lang> |
|||
Output: |
|||
''Since Rosetta Code doesn't seem to support uploads anymore, the resulting file cannot be shown.'' |
|||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |
||
{{trans|Yabasic}} |
{{trans|Yabasic}} |