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