input constantes;
input geometriepoint;
beginfig(1);
  affixe.O((0,0));
  affixe.A(u*(5,5));
  affixe.N(u*(5,9));
  affixe.S(u*(5,1));
  affixe.B(3/5[z.A,z.N]);
  affixe.R(u*(-4,1));
  affixe.T(2[z.R,z.O]);
  affixe.U(2[z.S,z.O]);
  path cc,cd,ce,cf;
  cc=cercle(O,4cm);
  cd=cc yscaled 0.15;
  ce=cercle(O,(4+-+2.4)*cm);
  cf=ce yscaled 0.15;
  fill (cf shifted z.B) withcolor 0.9white;  
  draw ((subpath(0,(length cd)/2) of cd) shifted z.A) dashed evenly;
  draw (subpath((length cd)/2,length cd) of cd) shifted z.A;
  draw ((subpath(0,(length cf)/2) of cf) shifted z.B) dashed evenly;
  draw (subpath((length cf)/2,length cf) of cf) shifted z.B;
  draw droite(N,S,1.15) dashed dashpattern(on12bp off6bp on3bp off6bp);
  dotlabel(btex  etex,z.A);
  dotlabel(btex  etex,z.B);
  draw (z.A--((point(0) of cf) shifted z.B)--z.B) dashed evenly withpen pencircle scaled 2bp;
  affixe.M((point(0) of cf) shifted z.B);
  draw codeperp(M,B,A,7.5);
  affixe.P(z.N shifted (u*(-4,0)));
  affixe.Q((point((length cd)/2) of cd) shifted z.A);
  cotation(Q,P,2mm,2mm,btex $r$ etex);
  draw z.N--z.P dashed evenly;
  cotation(A,B,2mm,2mm,btex $h$ etex);
  affixe.K(((z.R--z.S) shifted z.B) intersectionpoint (cc shifted z.A));
  affixe.L(z.K reflectedabout(z.A,z.B));
  draw ((z.U--z.R) shifted z.B)--z.L;
  draw z.L--z.K dashed evenly;
  draw z.K--(z.S shifted z.B);
  draw ((z.U--z.T--z.S) shifted z.B) withpen pencircle scaled 1.25bp;
  affixe.V(((z.T--z.U) shifted z.B) intersectionpoint (cc shifted z.A));
  affixe.W((point(0) of cf) shifted z.B);
  affixe.X(2[z.W,z.B]);
  affixe.Y(z.V reflectedabout(z.A,z.B));
  draw arccercle(V,W,A) dashed evenly;
  draw (arccercle(V,W,A) reflectedabout(z.A,z.B)) dashed evenly;
  draw arccercle(W,X,A);
  draw arcicercle(V,Y,A);
  currentpicture:=currentpicture rotatedabout(z.A,5);
endfig;
beginfig(2);
  affixe.O((0,0));
  affixe.A(u*(5,5));
  affixe.N(u*(5,9));
  affixe.S(u*(5,1));
  affixe.B(0/5[z.A,z.N]);
  affixe.R(u*(-4,1));
  affixe.T(2[z.R,z.O]);
  affixe.U(2[z.S,z.O]);
  path cc,cd,ce,cf;
  cc=cercle(O,4cm);
  cd=cc yscaled 0.15;
  ce=cercle(O,(4+-+0)*cm);
  cf=ce yscaled 0.15;
  fill (cf shifted z.B) withcolor 0.9white;  
  draw ((subpath(0,(length cd)/2) of cd) shifted z.A) dashed evenly;
  draw (subpath((length cd)/2,length cd) of cd) shifted z.A;
  draw ((subpath(0,(length cf)/2) of cf) shifted z.B) dashed evenly;
  draw (subpath((length cf)/2,length cf) of cf) shifted z.B;
  draw droite(N,S,1.15) dashed dashpattern(on12bp off6bp on3bp off6bp);
  dotlabel(btex  etex,z.A);
  affixe.P(z.N shifted (u*(-4,0)));
  affixe.Q((point((length cd)/2) of cd) shifted z.A);
  cotation(Q,P,2mm,2mm,btex $r$ etex);
  draw z.N--z.P dashed evenly;
  affixe.K(((z.R--z.S) shifted z.B) intersectionpoint (cc shifted z.A));
  affixe.L(z.K reflectedabout(z.N,z.S));
  draw ((z.U--z.R) shifted z.B)--z.L;
  draw z.L--z.K dashed evenly;
  draw z.K--(z.S shifted z.B);
  draw ((z.U--z.T--z.S) shifted z.B) withpen pencircle scaled 1.25bp;
  affixe.V((((z.T--z.U) shifted z.B) intersectionpoint (cc shifted z.A)) reflectedabout(z.N,z.S));
  affixe.W((point(0) of cf) shifted z.B);
  affixe.X(2[z.W,z.B]);
  affixe.Y(z.V reflectedabout(z.N,z.S));
  draw arccercle(V,W,A) dashed evenly;
  draw (arccercle(V,W,A) reflectedabout(z.N,z.S)) dashed evenly;
  draw arccercle(W,X,A);
  draw arccercle(V,Y,A);
  currentpicture:=currentpicture rotatedabout(z.A,5);
endfig;
beginfig(3);
  affixe.O((0,0));
  affixe.A(u*(5,5));
  affixe.N(u*(5,9));
  affixe.S(u*(5,1));
  affixe.B(z.S);
  affixe.R(u*(-4,1));
  affixe.T(2[z.R,z.O]);
  affixe.U(2[z.S,z.O]);
  path cc,cd;
  cc=cercle(O,4cm);
  cd=cc yscaled 0.15;
  draw ((subpath(0,(length cd)/2) of cd) shifted z.A) dashed evenly;
  draw (subpath((length cd)/2,length cd) of cd) shifted z.A;
  draw droite(N,S,1.15) dashed dashpattern(on12bp off6bp on3bp off6bp);
  dotlabel(btex  etex,z.A);
  affixe.P(z.N shifted (u*(-4,0)));
  affixe.Q((point((length cd)/2) of cd) shifted z.A);
  cotation(Q,P,2mm,2mm,btex $r$ etex);
  draw z.N--z.P dashed evenly;
  affixe.K(((z.R--z.S) shifted z.B) intersectionpoint (cc shifted z.A));
  affixe.L(z.K reflectedabout(z.N,z.S));
  draw ((z.U--z.R) shifted z.B)--z.K;
  draw z.L--z.K dashed evenly;
  draw z.L--(z.S shifted z.B);
  draw ((z.U--z.T--z.S) shifted z.B) withpen pencircle scaled 1.25bp;
  draw cc shifted z.A;
  currentpicture:=currentpicture rotatedabout(z.A,5);
endfig;
end
