% --- start of displayed preamble in the book ---
% p=picture
def draw_multipath(expr p) text options=
 for i within p:
   draw i options;
 endfor;
enddef;

vardef addto_multipath(text p)(expr pa,thickness) text options=
 save savepen;
 pen savepen;
 savepen=currentpen;
 pickup pencircle scaled thickness;
 addto p also image(draw pa options;);
 currentpen:=savepen;
enddef;
% --- end of displayed preamble in the book ---
% graphic converted to gray in book using 'color2gray'
defaultfont:="ptmr8r";
warningcheck:=0;
beginfig(1)
numeric u;u=10mm;
path p[];picture pic;
p0=origin..(2u,0)..(4u,u)..(3u,2u)
   ...(2u,-u)..tension2..(u,3u);
n=20;
for i=1 upto n:
 p[i]=subpath(((i-1)/n)*length(p0),
              (i/n)*length(p0)) of p0;
endfor;
pic=nullpicture;
for i=1 upto n:
 if odd i:
   addto_multipath(pic)(p[i],2pt*i/n)
      withcolor ((i/n)*red+(1-i/n)*blue);
 else:
   addto_multipath(pic)(p[i],3pt*(1-i/n))
      withcolor ((i/n)*green+(1-i/n)*blue);
 fi;
endfor;
draw_multipath(pic);
endfig;
end;