Théorème de Pascal pour la parabole

Auteur ou autrice : Vincent Zoonekynd.

Mise en ligne le 30 octobre 2024

Image du résultat de l’exemple

En 1999, puis mis à jour en 2001, Vincent Zoonekynd a mis en ligne un fichier MetaPost illustrant différentes utilisations du programme avec plus de 300 exemples. Ces exemples sont disponibles sur le CTAN.

Code


beginfig(217)
def rescale_currentpic :=
  if xpart (lrcorner currentpicture - llcorner currentpicture) > 4cm:
    currentpicture := currentpicture scaled ( 4cm /
      xpart (lrcorner currentpicture - llcorner currentpicture) );
  fi;
enddef;
vardef check_pascal =
  save again;
  boolean again;
  again := false;
  % Distance entre deux points sur le cercle : au moins 1mm
  for i=0 upto 5:
    for j=i+1 upto 5:
      show( decimal(i) &" "& decimal(j) &" "& decimal(abs(A[i]-A[j])/2mm) );
      if abs(A[i]-A[j]) < 2mm:
        again := true;
      fi;
    endfor;
  endfor;
  % Distance entre deux des M[i] : au moins 2mm, au plus 10cm
  for i=0 upto 2:
    for j=i+1 upto 2:
      if (abs(M[i]-M[j]) > 10cm) or (abs(M[i]-M[j]) < 2mm):
        again := true;
      fi;
    endfor;
  endfor;
  % Distance entre un A[i] et un M[i] : au moins 2mm
  for i=0 upto 5:
    for j=0 upto 2:
      if abs(A[i]-M[j]) < 2mm:
        again := true;
      fi;
    endfor;
  endfor;
  % Distance entre le cercle et l'un des M[i] : au plus 10cm
  if abs(M[0])>10cm:
    again:=true;
  fi;
  show again;
  not again
enddef;
vardef pascal(expr C) =
  forever:
    pair A[], M[];
    for i=0 upto 5:
      A[i] := point uniformdeviate(length(C)) of C;
    endfor;
    M[0] = whatever[ A[0], A[1] ];
    M[0] = whatever[ A[3], A[4] ];
    M[1] = whatever[ A[1], A[2] ];
    M[1] = whatever[ A[4], A[5] ];
    M[2] = whatever[ A[2], A[3] ];
    M[2] = whatever[ A[5], A[0] ];
    exitif check_pascal;
  endfor;

  draw C;
  draw A[0]--A[1] withcolor red;
  draw A[3]--A[4] withcolor red;
  draw A[0]--M[0] withcolor red dashed evenly;
  draw A[3]--M[0] withcolor red dashed evenly;

  draw A[1]--A[2] withcolor green;
  draw A[4]--A[5] withcolor green;
  draw A[1]--M[1] withcolor green dashed evenly;
  draw A[4]--M[1] withcolor green dashed evenly;

  draw A[2]--A[3] withcolor blue;
  draw A[5]--A[0] withcolor blue;
  draw A[2]--M[2] withcolor blue dashed evenly;
  draw A[5]--M[2] withcolor blue dashed evenly;

  draw M[0]--M[1]--M[2]--cycle withpen pencircle scaled 2bp;
  for i=0 upto 2:
    draw M[i] withpen pencircle scaled 6bp;
  endfor;
  for i=0 upto 5:
    draw A[i] withpen pencircle scaled 6bp;
  endfor;
enddef;
  pascal((for i=-2cm step .1cm until 2cm:
        (i, (i/1cm)**2 *1cm) ..
      endfor (2.1cm,4.41cm)) rotated 30);
  rescale_currentpic;
endfig;

end.

Mots clés : pascalparaboleshowwhateverzoonekynd

Cet exemple fait partie de la collection d’exemples Exemples de Vincent Zoonekynd.

Fichiers

Télécharger l’archive complète