Exercice VB: Courbes de Bézier

Une courbe de Bézier est définie par deux points extrêmes (P1 et P4) et deux autres points (P2 et P3) qui contrôlent les tangentes vectorielles des points extrêmes.

Programme demandé:

  1. Interface (voir exemple ci-dessous):
  • Huit zones de saisie de texte pour entrer les coordonnées (X,Y) de P1 à P4
  • Possibilité de modifier TMax , le nombre de valeurs que pourra avoir t, soit le nombre de segments de la courbe (on prendra par défaut TMax = 10)
  • Bouton Afficher
  • La courbe calculée pourra être affichée sur la feuille même ou , ce qui serait de loin préférable, dans une zone image (PictureBox) – voir note ci-après
  1. Le bouton Afficher aura pour but de lancer l'exécution du calcul et d'afficher la courbe dans l'objet retenu (Form ou PictureBox) . On supposera que les valeurs X et Y calculées seront comprises entre –1 et +1.
  1. Créer une fonction bezier recevant les cordonnées X et Y des quatre points P(1) à P(4) ainsi qu'une valeur T (comprise entre 0 et 1) . Cette fonction doit retourner les valeurs X et Y du point de la courbe correspondant à la valeur de T reçue.

Note: Pour dessiner dans un objet Picture, il suffit d'utiliser les instructions classiques précédées du nom de l'objet en question. Par exemple :

Picture1.Scale (Xmin, Ymax)-(Xmax, Ymin)
Picture1.Cls
Picture1.Pset (X,Y)

Picture1.Line (X1,Y1) - (X2,Y2)
Picture1.Line – (X2,Y2)

1234567891011121314151617181920212223242526272829303132333435363738394041424344Code de la feuille Form1 :Dim P(1 To 4) As XYPointDim Tmax As Integer Private Sub Command1_Click() Dim V As XYPoint Dim T As Double Dim i As Integer  'Lecture des valeurs For i = 1 To 4 P(i).X = Val(PX(i).Text) P(i).Y = Val(PY(i).Text) Next i Tmax = Val(T_TMax.Text)  'Espace de travail Picture1.Scale (-1, 1)-(1, -1) Picture1.Cls  'Calcul et dessin Picture1.PSet (P(1).X, P(1).Y) For i = 1 To Tmax T = i / Tmax V = bezier(P, T) Picture1.Line -(V.X, V.Y) Next iEnd SubCode à placer dans un module :Public Type XYPoint X As Single Y As SingleEnd Type Public Function bezier(P() As XYPoint, T As Double) As XYPoint bezier.X = P(1).X * (1 - T) ^ 3 _ + P(2).X * (1 - T) ^ 2 * 3 * T _ + P(3).X * (1 - T) * 3 * T ^ 2 _ + P(4).X * T ^ 3 bezier.Y = P(1).Y * (1 - T) ^ 3 _ + P(2).Y * (1 - T) ^ 2 * 3 * T _ + P(3).Y * (1 - T) * 3 * T ^ 2 _ + P(4).Y * T ^ 3End Function
Article publié le 03 Janvier 2012