Construction récursive d’une courbe de Bézier

Auteur ou autrice : Vincent Zoonekynd.

Mise en ligne le 19 avril 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. Ici, une macro est définie récursivement pour construire des points de la courbe de Bézier cubique définie par 4 points.

Code


u:=1cm;
beginfig(62)
vardef bezier(expr n,A,B,C,D) =
  save a;
  pair a[];
  a[1] := A;
  a[2] := B;
  a[3] := C;
  a[4] := D;

  a[12]   := 1/2 [ a[1],   a[2]   ];
  a[23]   := 1/2 [ a[2],   a[3]   ];
  a[34]   := 1/2 [ a[3],   a[4]   ];
  a[123]  := 1/2 [ a[12],  a[23]  ];
  a[234]  := 1/2 [ a[23],  a[34]  ];
  a[1234] := 1/2 [ a[123], a[234] ];

  if n>0:
    bezier(n-1, a[1], a[12], a[123], a[1234]);
    bezier(n-1, a[1234], a[234], a[34], a[4]);
  else:
    draw a[1234] withpen pencircle scaled 2bp;
  fi;
enddef;

  pair A, B, C, D;
  A = (0,0);
  D = (2u,0);
  B = (-u,2u);
  C = (3u,3u);

  draw A withpen pencircle scaled 4bp;
  draw B withpen pencircle scaled 4bp;
  draw C withpen pencircle scaled 4bp;
  draw D withpen pencircle scaled 4bp;

  bezier(5,A,B,C,D);
endfig;

end.

Mots clés : récursionBézierbarycentrezoonekynd

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

Fichiers

Télécharger l’archive complète