Outils pour utilisateurs

Outils du site


nsi:tds:maths:splines:bezier

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:maths:splines:bezier [2023/01/18 13:22] goupillwikinsi:tds:maths:splines:bezier [2023/01/22 19:25] (Version actuelle) goupillwiki
Ligne 46: Ligne 46:
  
 $$M(t) = P_0 + t \cdot(-3 P_0 + 3 P_1) + t^2 (3 P_0 - 6 P_1 + 3 P_2)  + t^3 (-P_0 + 3 P_1 -3 P_2 + P_3)$$ $$M(t) = P_0 + t \cdot(-3 P_0 + 3 P_1) + t^2 (3 P_0 - 6 P_1 + 3 P_2)  + t^3 (-P_0 + 3 P_1 -3 P_2 + P_3)$$
 +
 +En effet, on peut calculer au préalable : $c_0 = P_0$ ; $c_1 = -3 P_0 + 3 P_1$ ; ... et ensuite on a
 +
 +$$M(t) = c_0 + t \cdot c_1 + t^2 \cdot c_2 + t^3 \cdot c_3$$
 +
 +Ce qui est très rapide à faire.
  
 On constate, en remplaçant, que $M(0) = P_0$ et $M(1) = P_3$. La courbe, en général, ne passe ni par $P_1$ ni par $P_2$. On constate, en remplaçant, que $M(0) = P_0$ et $M(1) = P_3$. La courbe, en général, ne passe ni par $P_1$ ni par $P_2$.
Ligne 160: Ligne 166:
         # vérifier que le nombre de points est valide         # vérifier que le nombre de points est valide
         self.points = [Point(x,y) for x,y in coords]         self.points = [Point(x,y) for x,y in coords]
-     
-    def curve_points(self): 
-        ''' 
-        renvoie la liste des points de self.points qui sont des points de la courbe 
-        ''' 
- 
-    def control_points(self): 
-        ''' 
-        renvoie la liste des points de self.points qui sont des points de contrôle 
-        ''' 
          
     def calc_coeffs(self, i:int):     def calc_coeffs(self, i:int):
         '''         '''
         i:indice de l'arc considéré         i:indice de l'arc considéré
-        la courbe de Bézier est calculée avec les points P0, P1, P2, P3 de l'arc l'arc+        la courbe de Bézier est calculée avec les points P0, P1, P2, P3 de l'arc
         on calcule 4 coefficients :         on calcule 4 coefficients :
         c0 = P0         c0 = P0
Ligne 191: Ligne 187:
         t: flottant entre 0 et 1, compris         t: flottant entre 0 et 1, compris
         i: rang de l'arc considéré         i: rang de l'arc considéré
-        renvoie c0 + c1*t + c2*t**2 + c3*t**3 avec c0, c1, c2, c3 les coeffs de la fonction précédente.+        renvoie c0 + c1*t + c2*t**2 + c3*t**3 avec c0, c1, c2, c3 
 +        les coeffs de la fonction précédente. 
 +        ''' 
 +        # obtenir les valeurs des coefficients 
 +        # renvoie le résultat du calcul 
 + 
 +    def tangent(self, t:float, i:int): 
 +        t: flottant entre 0 et 1, compris 
 +        i: rang de l'arc considéré 
 +        renvoie c1 + 2*c2*t + 3*c3*t**2 avec c0, c1, c2, c3
         '''         '''
         # obtenir les valeurs des coefficients         # obtenir les valeurs des coefficients
Ligne 218: Ligne 223:
  
 <code python> <code python>
-demoplot.py+demobezier.py
 # démonstration en utilisant matplotlib # démonstration en utilisant matplotlib
  
Ligne 227: Ligne 232:
                     (210, 100), (200,110), (100,200),                     (210, 100), (200,110), (100,200),
                     (0,290), (10,350), (120,400)]                     (0,290), (10,350), (120,400)]
-= Bezier(coords)+spline = Bezier(coords)
  
 # tracé de la courbe # tracé de la courbe
-pts = b.plot_points()+pts = spline.plot_points()
 # dans matplotlib, il faut placer les x et les y dans deux listes séparées # dans matplotlib, il faut placer les x et les y dans deux listes séparées
 x = [pt.x for pt in pts] x = [pt.x for pt in pts]
Ligne 237: Ligne 242:
  
 # tracé des points : # tracé des points :
-pts_curve b.curve_points() +len(coords
-x = [pt.x for pt in pts+x = [coords[i][0] for in range(0,n,3)
-y = [pt.y for pt in pts]+y = [coords[i][1] for in range(0,n,3)]
 plt.scatter(x, y, c='b') plt.scatter(x, y, c='b')
-pts_control = b.control_points() + 
-x = [pt.x for pt in pts+# tracé des contrôles 
-y = [pt.y for pt in pts]+x = [coords[i][0] for in range(n) if i%3 != 0
 +y = [coords[i][1] for in range(n) if i%3 != 0] 
 plt.scatter(x, y, c='y') plt.scatter(x, y, c='y')
 plt.show() plt.show()
nsi/tds/maths/splines/bezier.1674044521.txt.gz · Dernière modification : de goupillwiki