Intersection de paraboles
%@AUTEUR: Jean-Louis Garcin
%@DATE: 26 juin 2010
beginfig(1);
path pc,gc, traitb,traith,inter,trait,traitv;
numeric u,d, r,h;
picture pic;
%%%%%
d=35;
u=0.3cm;
%%%%
for r= 0 upto (d-1):
pc := halfcircle scaled ((2*r)*u) rotated (-90);
gc := halfcircle scaled ((2*r+2)*u) rotated (-90);
for h= 0 upto (r-1):
traitb := (0,h*u)-- (d*u,h*u);
traith := (0,(h+1)*u)--(d*u,(h+1)*u);
if ((r+h)/2) >floor((r+h)/2):
inter:= buildcycle(traitb,pc,traith,gc);
draw inter withcolor ((r+h)/(2.2*d))[black,white];
fill inter withcolor ((r+h)/(2.2*d))[black,white];
fi
endfor;
endfor;
for r = (-3) downto (- d):
pc := halfcircle scaled (2*(abs(r+1))*u) rotated (-90);
gc := halfcircle scaled (2*(abs(r))*u ) rotated (-90);
for h= -1 downto r+1 :
traitb := (0,h*u)-- (d*u,h*u);
traith := (0,(h+1)*u)--(d*u,(h+1)*u);
if ((r+h)/2) =floor((r+h)/2):
inter:= buildcycle(traitb,gc,traith,pc);
draw inter withcolor ((-r-h)/(2.2*d))[black,white];
fill inter withcolor ((-r-h)/(2.2*d))[black,white];
fi
endfor;
endfor;
for r= 1 upto d:
gc := halfcircle scaled (2*r*u) rotated (-90);
trait:= (0,(1-r)*u)-- (d*u,(1-r)*u);
traitv:=(0,(1-r)*u)--(0,-(r*u));
inter:=buildcycle(traitv,trait,gc);
fill inter withcolor ((2*r)/(2.2*d))[black,white];
draw inter withcolor ((2*r)/(2.2*d))[black,white];
endfor;
pic:=currentpicture;
draw pic xscaled (-1);
endfig;
end;