summaryrefslogtreecommitdiff
path: root/info/examples/lgc2/4-4-4.mp
blob: df259e33fb8af6ae85f19ddbd6ca8e508bf65014 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
% --- start of displayed preamble in the book ---

vardef hilbertPath(expr s, n) =
  save pa,pb,pc,A,B,C,shift,hilb,h;
  path pa,pb,pc,hilb,h; pair A,B,C,shift;
  if n=0:  hilb=origin;
  else:    shift=(s, 0);
    h=hilbertPath(s, n-1);
    pa=h reflectedabout(origin,(1, -1));
    A=point length(pa) of pa;
    pb=h shifted (A+shift);
    B=point 0 of pb;
    hilb=pa & A--B & pb;
    C=B shifted ((A+.5shift) rotated -90);
    pc=reverse hilb reflectedabout(C,C+right);
    hilb:=hilb & point length(hilb) of
          hilb--point 0 of pc  & pc;
  fi
  hilb
enddef;
% --- end of displayed preamble in the book ---
defaultfont:="ptmr8r";
warningcheck:=0;
beginfig(1)
side=5cm; n=5;
onestep=side/(2**n);
draw hilbertPath(onestep, n);
draw unitsquare scaled side
     shifted (-.5onestep,.5onestep-side);
endfig;
end;