Retour

Source : tangentes.mp

tangentes.mp
%@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;
 
tangentes.mp (figure 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