MetaPost Présentation des sources Retour à la page précédente Archive (source + images) Fichier au format texte pour télécharger Imprimer le document sans le menu !
% inversion.mp
u = 1cm;
% == Produit scalaire
def ps(expr a,b) =
        (xpart a)*(xpart b) + (ypart a)*(ypart b)
        enddef;
% == Distance
def distance(expr a,b) =
        sqrt(ps(b-a,b-a))
        enddef;
% == Mediatrice
def mediatrice (expr a, b, x) =
        (0.5[a,b]+(x*(b-a) rotated 90))--(0.5[a,b]+(x*(b-a) rotated -90))
        enddef;
% == Centre du cercle circonscrit
def centre_cercle_c(expr a, b ,c) =
        (mediatrice(a,b,10)) intersectionpoint (mediatrice(b,c,10))
        enddef;
% == Cercle circonscrit
def cercle_c (expr a, b, c) =
        fullcircle
        scaled (2*distance(a,centre_cercle_c(a,b,c)))
        shifted (centre_cercle_c(a,b,c))
        enddef;
% == Point inverse
def inverse (expr p, c, x) =
        (x/distance(p,c))**2*(p-c)  shifted c
        enddef;
%======================================================================
beginfig(1);
path cercle;
cercle = fullcircle scaled 8u shifted (6u,3u);
draw cercle;
z0 = (0,0);
z1 = point 1.6 of cercle;
z4 = point  7.3 of cercle;
z2 = cercle intersectionpoint (z0--z1);
z5 = cercle intersectionpoint (z0--z4);
pickup pencircle scaled 1.5pt;
draw z0--z1;
draw z0--z4;
pickup pencircle scaled 0.5pt;
draw z1--z4;
draw z2--z5;
dotlabel.lft(btex $O$ etex,z0);
dotlabel.urt(btex $A$ etex,z1);
dotlabel.ulft(btex $A'$etex,z2);
dotlabel.lrt(btex $B$ etex,z4);
dotlabel.bot(btex $B'$ etex,z5);
endfig;
%======================================================================
beginfig(2);
path cardioide, parabole;
cardioide = (0,0){dir 180}
            for i = 1 upto 17:
              ..(1.8u*(1+cosd(180-10*i))*cosd(180-10*i),
	    		        1.8u*(1+cosd(180-10*i))*sind(180-10*i))
            endfor
            ..(1.8u*2,0){dir -90};
parabole = (1.8u*0.5,0){dir 90}
            for i = 1 upto 17:
               ..(1.8u/(1+cosd(10*i))*cosd(10*i),
	    		        1.8u/(1+cosd(10*i))*sind(10*i))
            endfor;
drawarrow (-4u,0)--(4u,0);
drawarrow (0,-4u)--(0,4u);
pickup pencircle scaled 1.5pt;
draw cardioide;
draw cardioide yscaled -1;
draw parabole;
draw parabole yscaled -1;
z0 = (0,0);
z1 = point 11 of cardioide;
z2 = parabole intersectionpoint (z0--10z1);
pickup pencircle scaled 0.5pt;
draw z0--z1;
z4 = parabole intersectiontimes (z0--10z1);
z1 - (a,0)      =       whatever*direction 11 of cardioide;
(b,4u) - z1     =       whatever*direction 11 of cardioide;
(c,-4u)  - z2   =       whatever*direction x4 of parabole;
(d,4u) - z2     =       whatever*direction x4 of parabole;
draw (a,0)--(b,4u);
draw (c,-4u)--(d,4u);
z3 = ((a,0)--(b,4u)) intersectionpoint ((c,-4u)--(d,4u));
draw (z3+3*(z3-0.5[z1,z2]))--(0.5[z1,z2]-3*(z3-0.5[z1,z2]));
% ------------------------
clip currentpicture to (-4u,-4u)--(-4u,4u)--(4u,4u)--(4u,-4u)--cycle;
% ------------------------
dotlabel.lrt(btex $O$ etex, z0);
dotlabel.ulft(btex $M$ etex, z1);
dotlabel.rt(btex $M'$ etex, z2);
label.lft(btex $y$ etex, (-0.5mm,4u));
label.bot(btex $x$ etex, (4u,-0.5mm));
endfig;
%======================================================================
beginfig(3);
path ca;
ca      =       fullcircle scaled 3u;
z0      =       (2u,2u);
z1      =       (7u,2u);
z2      =       (12u,2u);
pickup pencircle scaled 1.5pt;
draw ca shifted z0;
draw ca shifted z1;
draw ca shifted z2;
pickup pencircle scaled 0.5pt;
draw fullcircle scaled 2.4u shifted (1.2/sqrt(2)*u+2u,1.2/sqrt(2)*u+2u);
z3=(fullcircle scaled 2.4u shifted (1.2/sqrt(2)*u+2u,1.2/sqrt(2)*u+2u))
                intersectionpoint (ca shifted z0);
draw (x3-u,y3+u)--(x3+2.6u,y3-2.6u);
z4      = point 1.9 of (ca shifted z1);
z5      = point 0.5 of (ca shifted z1);
z6  = (0.5u, 0.4u) shifted z1;
draw cercle_c(z4,z5,z6);
draw cercle_c(z4,z5,inverse(z6,z1,1.5u));
draw ((-u,-2u)--(u,2u)) shifted z2;
% ------------------------
dotlabel.llft(btex $O$ etex, z0);
dotlabel.llft(btex $O$ etex, z1);
dotlabel.lft(btex $O$ etex, z2);
label.bot(btex \bf a) etex,(2u,0));
label.bot(btex \bf b) etex,(7u,0));
label.bot(btex \bf c) etex,(12u,0));
label.top(btex $\cal D$ etex,z3+(-0.1u,.3u));
label.rt(btex $\cal C$ etex,z0+(1.9u,1.9u));
label.urt(btex ${\cal C}$ etex,z1+(1.2u,1.2u));
label.urt(btex ${\cal C}'$ etex,z1+(2.2u,2.2u));
label.lrt(btex $\cal D$ etex,z2+(u,1.9u));
endfig;
end