% --- start of displayed preamble in the book ---
% --- end of displayed preamble in the book ---
defaultfont:="ptmr8r";
warningcheck:=0;
beginfig(1)
% Fraser's Spiral
% D. Roegel 29 April 2007
numeric u;
u=2.7cm;
vardef twisted_cord(expr i,twist,a,col)=
save qa,qb,qc,P,ratio;
path qa,qb,qc;
pair P[];
ratio=0.8;
P1=A[i];
P2=radius(i)*dir((1+i/2)*da);
P3=radius(i)*dir((1+i/2-shift)*da);
P5=B[i-1] rotated da;
P6=radius(i)*dir((2+i/2)*da);
P7=radius(i)*dir((2+i/2-shift)*da);
P0=.5[P2,P7];
P21=arclength((.5[ratio,1])[P1,P2]--origin)*unitvector(P0);
P22=arclength((.5[ratio,1])[P5,P7]--origin)*unitvector(P0);
P12=P2 rotatedaround(P0,twist);
P13=P3 rotatedaround(P0,twist);
P16=P6 rotatedaround(P0,twist);
P17=P7 rotatedaround(P0,twist);
P23=P21 rotatedaround(P0,twist);
P24=P22 rotatedaround(P0,twist);
P14=ratio[P1,P12];
P18=ratio[P5,P17];
qa=P1--P12--P13--cycle;
qb=P5--P16--P17--cycle;
qc=P14--P12...P24...P18--P17..P23..cycle;
fill qa rotated a withcolor col;
fill qb rotated a withcolor col;
fill qc rotated a withcolor col;
enddef;
def circle(expr r)=
fullcircle scaled 2r
enddef;
def radius(expr i)=
(((i+10*i*i)/1000)*u)
enddef;
color cola,colb;
cola=.9(1,1,0);
colb=.8white;
cola:=.9(1,1,0);
colb:=.7green;
nc=16;
n=16;
da=360/n;
shift=0.4;
path p[];
pair A[],B[];
%beginfig(1);
fill unitsquare shifted (-.5,-.5) scaled 3u withcolor cola;
z0=origin ;
if false:
for i=1 upto nc:
draw circle(radius(i));
endfor;
pickup pencircle scaled 5pt;
for i=1 upto nc:
for j=1 upto n:
draw radius(i)*dir((j+i/2)*da) withcolor red;
draw radius(i)*dir((j+i/2-shift)*da) withcolor green;
endfor;
endfor;
pickup pencircle scaled .5;
fi;
p1=(radius(1)*dir((1+1/2-shift)*da))
for i=2 upto nc:
..(radius(i)*dir((1+i/2-shift)*da))
endfor;
p2=p1 rotated (shift*da);
p3=(radius(1)*dir((1+1/2-shift)*da))
for i=2 upto nc:
..(radius(i)*dir((1-i/2-shift)*da))
endfor;
p4=p3 rotated (shift*da);
if false:
for j=1 upto n:
draw p1 rotated (j*da);
draw p2 rotated (j*da);
draw p3 rotated (j*da);
draw p4 rotated (j*da);
endfor;
fi;
p5=p1--(reverse p2)--cycle;
%fill p5 withcolor .8white;
p6=p2--(reverse (p1 rotated da))--cycle;
%fill p6 withcolor .8green;
p7=p3--(reverse p4)--cycle;
%fill p7 withcolor .8blue;
p8=p4--(reverse (p3 rotated da))--cycle;
%fill p8 withcolor .8red;
for j=1 upto n:
fill p7 rotated (j*da) withcolor colb;
endfor;
for j=1 upto n:
fill p5 rotated (j*da) withcolor colb;
endfor;
pickup pencircle scaled 5pt;
for i=1 upto nc-1:
A[i]=p1 intersectionpoint (p4 rotated (i*da));
B[i]=p2 intersectionpoint (p3 rotated (i*da+da));
%draw A[i] withcolor (1,1,0);
%draw B[i] withcolor (1,0,1);
endfor;
pickup pencircle scaled .5;
for i=2 upto nc-1:
for j=1 upto n:
twisted_cord(i,3,j*da,(i/nc)[colb,black]);
endfor;
endfor;
clip currentpicture to unitsquare shifted (-.5,-.5) scaled 3u;
picture lab;
% intentionally slightly shifted to the right
lab=thelabel(btex Fraser's spiral etex,z0+.1u*right);
unfill bbox lab;
draw lab withcolor red;
%endfig;
%end
endfig;
end;