% --- 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;