Axe de similitude (mp-geom2d)

Auteur ou autrice : Maxime Chupin.

Mise en ligne le 19 mai 2025

Image du résultat de l’exemple

mp-geom2d a été écrit avec le but de proposer des macros MetaPost permettant de réaliser une figure de géométrie en collant d’assez près à une description impérative :

  • Soit $A$ le point de coordonnées $(2,3)$.
  • Soit $B$ le point de coordonnées $(4,5)$.
  • Trace la droite $(A,B)$.
  • ...

Ici, on montre les exemples de la galerie de la documentation à la fois dans l’interface en français et celle en anglais.

Code


input geom2d;
%%% depuis Drawing with Metapost de Toby Thurston
labeloffset := 6;
gddTaillePoint := 3;
gddCouleurPoint := Yellow;
gddU:=0.65cm;
beginfig(1);
  C1 = Cercle((-4,0),3);
  C2 = Cercle((3,0),2);
  C3 = Cercle((0,-4),1);

  T1 = TangenteCommuneExterieure(C1,C2);
  T2 = TangenteCommuneExterieure(C2,C1);
  T3 = TangenteCommuneInterieure(C1,C2);
  T4 = TangenteCommuneInterieure(C2,C1);
  
  T5 = TangenteCommuneExterieure(C2,C3);
  T6 = TangenteCommuneExterieure(C3,C2);
  T7 = TangenteCommuneInterieure(C2,C3);
  T8 = TangenteCommuneInterieure(C3,C2);
  
  T9 = TangenteCommuneExterieure(C1,C3);
  T10 = TangenteCommuneExterieure(C3,C1);
  T11 = TangenteCommuneInterieure(C1,C3);
  T12 = TangenteCommuneInterieure(C3,C1);

  E12 = IntersectionDroites(T1,T2);
  E23 = IntersectionDroites(T5,T6);
  E31 = IntersectionDroites(T9,T10);
  I12 = IntersectionDroites(T3,T4);
  I23 = IntersectionDroites(T7,T8);
  I31 = IntersectionDroites(T11,T12);
  
  path t[];
  t1 :=(gddTraceObjet T1) gddEnPlace;
  t2 := (gddTraceObjet T2) gddEnPlace;
  t3 := (-10*gddU,-10*gddU)--(-10gddU,10*gddU);
  fill buildcycle(t1, t3,reverse t2) withcolor 1.4*LightSlateGrey;
  
  t4 :=(gddTraceObjet T3) gddEnPlace;
  t5 := (gddTraceObjet T4) gddEnPlace;
  t6 := (1.5*gddU,-10*gddU)--(1.5*gddU,10*gddU);
  fill buildcycle(t4, t5,reverse t6) withcolor 1.1*LightSlateGrey;

  t7 :=(gddTraceObjet T3) gddEnPlace;
  t8 := (gddTraceObjet T4) gddEnPlace;
  t9 := (-1.5*gddU,-10*gddU)--(-1.5*gddU,10*gddU);
  fill buildcycle(t7, t8,reverse t9) withcolor 1.1*LightSlateGrey;

  drawoptions(withpen pencircle scaled 1pt withcolor LightSlateGrey);
  colorie C1 withcolor white;
  colorie C2 withcolor white;
  colorie C3 withcolor white;
  trace C1; trace C2; trace C3;
  
  drawoptions();
  trace Droite(Centre(C1),Centre(C2));
  trace Droite(Centre(C3),Centre(C2));
  trace Droite(Centre(C1),Centre(C3));

  D_E = Droite(E12,E23);
  trace D_E dashed evenly withcolor DarkBlue;

  E_I = Segment(E12,I31);
  trace E_I dashed evenly withcolor DarkRed;
  I_E1 = Segment(I12,E31);
  trace I_E1 dashed evenly withcolor DarkRed;
  I_E2 = Segment(I12,E23);
  trace I_E2 dashed evenly withcolor DarkRed;


  drawoptions();
  pointe Centre(C1);
  pointe Centre(C2);
  pointe Centre(C3);
  gddCouleurPoint := DarkBlue;
  pointe E12;  pointe E31; pointe E23;
  gddCouleurPoint := DarkRed;
  pointe I12;  pointe I31; pointe I23;

  label.top(btex $E_{12}$ etex,PointTOPair(E12) gddEnPlace);
  label.bot(btex $E_{31}$ etex,PointTOPair(E31) gddEnPlace);
  label.bot(btex $E_{23}$ etex,PointTOPair(E23) gddEnPlace);

  label.top(btex $I_{12}$ etex,PointTOPair(I12) gddEnPlace);
  label.llft(btex $I_{31}$ etex,PointTOPair(I31) gddEnPlace);
  label.lrt(btex $I_{23}$ etex,PointTOPair(I23) gddEnPlace);


  label.top(btex $C_{1}$ etex,PointTOPair(Centre(C1)) gddEnPlace);
  label.top(btex $C_{2}$ etex,PointTOPair(Centre(C2)) gddEnPlace);
  label.bot(btex $C_{3}$ etex,PointTOPair(Centre(C3)) gddEnPlace);

  draw textext("Axe de similitude") rotated (22) shifted (0.5[Pt(E23),Pt(E12)]
  gddEnPlace +(0,3));
  Fenetre(-10,-10,19,7);
endfig;
end.

% %%% English version

input geom2d;
%%% from Drawing with Metapost de Toby Thurston
labeloffset := 6;
SetPointSize(3);
SetPointColor(Yellow);
gddU:=0.65cm;
beginfig(1);
  C1 = Circle((-4,0),3);
  C2 = Circle((3,0),2);
  C3 = Circle((0,-4),1);

  T1 = ExternalCommonTangent(C1,C2);
  T2 = ExternalCommonTangent(C2,C1);
  T3 = InternalCommonTangent(C1,C2);
  T4 = InternalCommonTangent(C2,C1);
  
  T5 = ExternalCommonTangent(C2,C3);
  T6 = ExternalCommonTangent(C3,C2);
  T7 = InternalCommonTangent(C2,C3);
  T8 = InternalCommonTangent(C3,C2);
  
  T9 = ExternalCommonTangent(C1,C3);
  T10 = ExternalCommonTangent(C3,C1);
  T11 = InternalCommonTangent(C1,C3);
  T12 = InternalCommonTangent(C3,C1);

  E12 = LinesIntersection(T1,T2);
  E23 = LinesIntersection(T5,T6);
  E31 = LinesIntersection(T9,T10);
  I12 = LinesIntersection(T3,T4);
  I23 = LinesIntersection(T7,T8);
  I31 = LinesIntersection(T11,T12);
  
  path t[];
  t1 :=(gddTraceObjet T1) gddEnPlace;
  t2 := (gddTraceObjet T2) gddEnPlace;
  t3 := (-10*gddU,-10*gddU)--(-10gddU,10*gddU);
  fill buildcycle(t1, t3,reverse t2) withcolor 1.4*LightSlateGrey;
  
  t4 :=(gddTraceObjet T3) gddEnPlace;
  t5 := (gddTraceObjet T4) gddEnPlace;
  t6 := (1.5*gddU,-10*gddU)--(1.5*gddU,10*gddU);
  fill buildcycle(t4, t5,reverse t6) withcolor 1.1*LightSlateGrey;

  t7 :=(gddTraceObjet T3) gddEnPlace;
  t8 := (gddTraceObjet T4) gddEnPlace;
  t9 := (-1.5*gddU,-10*gddU)--(-1.5*gddU,10*gddU);
  fill buildcycle(t7, t8,reverse t9) withcolor 1.1*LightSlateGrey;

  drawoptions(withpen pencircle scaled 1pt withcolor LightSlateGrey);
  gddFill C1 withcolor white;
  gddFill C2 withcolor white;
  gddFill C3 withcolor white;
  gddDraw C1; gddDraw C2; gddDraw C3;
  
  drawoptions();
  gddDraw Line(Center(C1),Center(C2));
  gddDraw Line(Center(C3),Center(C2));
  gddDraw Line(Center(C1),Center(C3));

  D_E = Line(E12,E23);
  gddDraw D_E dashed evenly withcolor DarkBlue;

  E_I = Segment(E12,I31);
  gddDraw E_I dashed evenly withcolor DarkRed;
  I_E1 = Segment(I12,E31);
  gddDraw I_E1 dashed evenly withcolor DarkRed;
  I_E2 = Segment(I12,E23);
  gddDraw I_E2 dashed evenly withcolor DarkRed;


  drawoptions();
  gddDrawPoint Center(C1);
  gddDrawPoint Center(C2);
  gddDrawPoint Center(C3);
  SetPointColor(DarkBlue);
  gddDrawPoint E12;  gddDrawPoint E31; gddDrawPoint E23;
  SetPointColor(DarkRed);
  gddDrawPoint I12;  gddDrawPoint I31; gddDrawPoint I23;

  gddLabel.top(btex $E_{12}$ etex,E12);
  gddLabel.bot(btex $E_{31}$ etex,E31);
  gddLabel.bot(btex $E_{23}$ etex,E23);

  gddLabel.top(btex $I_{12}$ etex,I12);
  gddLabel.llft(btex $I_{31}$ etex,I31);
  gddLabel.lrt(btex $I_{23}$ etex,I23);


  gddLabel.top(btex $C_{1}$ etex,Center(C1));
  gddLabel.top(btex $C_{2}$ etex,Center(C2));
  gddLabel.bot(btex $C_{3}$ etex,Center(C3));

  draw textext("Axis of similitude") rotated (22) shifted (0.5[Pt(E23),Pt(E12)]
  gddInPlace +(0,3));
  Window(-10,-10,19,7);
endfig;
end.

Mots clés : géométriecerclestangenteaxesmp-geom2d

Cet exemple fait partie de la collection d’exemples Documentation de mp-geom2d.

Fichiers

Télécharger l’archive complète