-- hilbert.c
-- Hilbert curve
-- Luiz Henrique de Figueiredo (lhf@csg.uwaterloo.ca)
-- 10 Nov 95

dofile("ps.lua")

function p()
 PS.lineto(x,y)
end

function a(n)
 if (n==0) then return else n=n-1 end
 d(n); y=y+h; p(); a(n); x=x+h; p(); a(n); y=y-h; p(); b(n);
end

function b(n)
 if (n==0) then return else n=n-1 end
 c(n); x=x-h; p(); b(n); y=y-h; p(); b(n); x=x+h; p(); a(n);
end

function c(n)
 if (n==0) then return else n=n-1 end
 b(n); y=y-h; p(); c(n); x=x-h; p(); c(n); y=y+h; p(); d(n);
end

function d(n)
 if (n==0) then return else n=n-1 end
 a(n); x=x+h; p(); d(n); y=y+h; p(); d(n); x=x-h; p(); c(n);
end

function hilbert(n)
 PS.open("hilbert curve")
 h=2^(9-n)
 x=0
 y=0
 PS.moveto(x,y)
 a(n)
 PS.close()
end

hilbert(5)
