Exercice VB: Courbes de Bézier
Rédigé par GC Team, Publié le 03 Janvier 2012, Mise à jour le Mardi, 30 Novembre 1999 00:00Participez au vote ☆☆☆☆☆★★★★★
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é:
- 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
- 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.
- 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.Line (X1,Y1) - (X2,Y2) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Code de la feuille Form1 : Dim P(1 To 4) As XYPoint Dim 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 i End Sub Code à placer dans un module : Public Type XYPoint X As Single Y As Single End 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 ^ 3 End Function |