%@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; 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