Surface avec des trous (2)

Auteur ou autrice : Vincent Zoonekynd.

Mise en ligne le 14 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


u:=1cm;
beginfig(176)
  def curve(expr p,i,q,j,t) =
    point i of p {direction i of p} ..
    tension t ..
    point j of q {direction j of q}
  enddef;

  vardef sphere_with_holes (expr n) =
    save i;
    c[0] = fullcircle xscaled u yscaled 2u
                      shifted (4u,0) rotated (360/(2n)) ;
    for i=1 upto n-1:
      c[i] = c[i-1] rotated (360/n);
    endfor;
    l[0] = curve(c[0], 2, c[1], -2, 1);
    for i=1 upto n-1:
      l[i] = l[i-1] rotated (360/n);
    endfor;
    fill for i=0 upto n-1:
      ( reverse subpath(2,6) of c[i] ) &
      l[i] &
    endfor
    % To turn it into a cycle (ugly)
    point length(l[n-1]) of l[n-1] -- cycle
    withcolor .8white;
    for i=0 upto n-1:
      draw c[i]; draw l[i];
    endfor;
  enddef;
  path c[], l[];
  sphere_with_holes(6);
  def ellipse(expr a,b,c,d,e) =
    draw curve(a,b,c,d,e) ;
    draw curve(c,d,a,b,e) dashed evenly;
  enddef;

  ellipse (l[0], 2/3, l[2], 1/3, 4);
  ellipse (l[1], 2/3, l[3], 1/3, 4);
  ellipse (l[2], 2/3, l[4], 1/3, 4);
  ellipse (l[3], 2/3, l[5], 1/3, 4);
  ellipse (l[4], 2/3, l[0], 1/3, 4);
  ellipse (l[5], 2/3, l[1], 1/3, 4);
endfig;

end.

Mots clés : fullcircleellipsecourbesurfacezoonekynd

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

Fichiers

Télécharger l’archive complète