MetaPost
Tangentes communes à deux cercles

tangentes.mp [ source brut ]

 %@Auteur: Jean-Michel Sarlat 
 %@Date: 9 janvier 2007
 
 % Construction des tangentes communes à deux cercles. Cette construction
 % ne comprend pas les tests d'existence des tangentes...
 
 % Calcul de l'arcsin de o/h (o, h positifs et h >= o).
 def arcsin(expr o,h) = angle(h+-+o,o) enddef;
 
 % Définition d'une droite à partir de deux points a et b.
 vardef D(expr a,b) = 2[a,b]--2[b,a] enddef;
 
 % Définition d'un cercle à partir de son centre o et son rayon r.
 def C(expr o,r) = fullcircle scaled (2*r) shifted o enddef;
 
 % Définition d'un cadre rectangulaire.
 def cadre(expr xmin,ymin,xmax,ymax) =
  unitsquare xscaled (xmax-xmin) yscaled (ymax -ymin) shifted (xmin,ymin)
 enddef;
 
 % Pointer.
 def _pointe(expr p) =
     fill fullcircle scaled 4 shifted p withcolor black;
     fill fullcircle scaled 2 shifted p withcolor (1,1,0);
 enddef;
 vardef pointe(text t) = for p=t: _pointe(p); endfor; enddef;
 
 % Unité.
 u := 1cm;
 
 % Déclarations.
 pair O, O',w[];
 numeric R, R',a[];
 
 % Affectations.
 O := origin;
 O':= (5u,2u);
 R := 1u;
 R':= 3.5u;
 
 
Conversion au format PDF de tangentes.1
 beginfig(1);
 
     % w1 : centre de l'homothétie « extérieure » 
     % transformant C(O,R) en C(O',R').
     w1 := (R/(R-R'))[O,O'];
     % w2 : centre de l'homothétie « intérieure »
     % transformant C(O,R) en C(O',R').
     w2 := (R/(R+R'))[O,O'];
 
     % Demi-angle sous lequel est vu, de w1, le cercle C(O,R).
     a1 := arcsin(R,abs(O-w1));
     % Demi-angle sous lequel est vu, de w2, le cercle C(O,R).
     a2 := arcsin(R,abs(O-w2));
     
 
     fill C(O,R) withcolor 0.75white;
     fill C(O',R') withcolor 0.75white;
     draw D(w1,O') withcolor blue;
     
 
     % Les tangentes...
     draw D(w1,O') rotatedaround(w1,a1) withcolor green;
     draw D(w1,O') rotatedaround(w1,-a1) withcolor green;
     draw D(w1,O') rotatedaround(w2,a2) withcolor green;
     draw D(w1,O') rotatedaround(w2,-a2) withcolor green;
     
     labeloffset := 8;
     label.top(btex $O$ etex,O);
     label.top(btex $O'$ etex,O');
     label.top(btex $\Omega_1$ etex,w1);
     label.top(btex $\Omega_2$ etex,w2);
     
     pointe(O,O',w1,w2);
     
     clip currentpicture to cadre(-3u,-2u,10u,6u);    
 endfig;
 
 
 
 end
Validation CSS Validation XHTMLJean-Michel Sarlat — Dernière modification : 10 janvier 2007 (0.07s - 3017513 - vendredi 16 mai 2008)