summaryrefslogtreecommitdiff
path: root/info/examples/lgc2/4-5-10.mp
blob: 929cdf67399290d9e88b121d2870bd2cb166cc65 (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
% --- start of displayed preamble in the book ---

% --- end of displayed preamble in the book ---
vardef randomwalk(expr C,wd,ht,n,l,f,r)=
  save A,B,a,b;pair A,B;a=0;
  draw ((wd,-ht)--(wd,ht)--(-wd,ht)--(-wd,-ht)--cycle) shifted C;
  A=C;
  for i=1 upto n:
    forever:
      b:=a*f+((uniformdeviate 2)-1)*180r;
      B:=A+l*(uniformdeviate 1)*dir(b);
      if (abs(xpart(B-C))>= wd) or  (abs(ypart(B-C))>= ht):
        B:=A+l*(uniformdeviate 2)*dir(b+180);
      fi;
      exitif (abs(xpart(B-C))< wd) and  (abs(ypart(B-C))< ht);
    endfor;
    draw A--B;A:=B;a:=b mod 360;
  endfor;
enddef;
defaultfont:="ptmr8r";
warningcheck:=0;
beginfig(1)
randomwalk(origin,2.5cm,2.5cm,1000,10mm,0,1);
randomwalk((6cm,0),2.5cm,2.5cm,3000,4mm,1,0.3);
endfig;
end;