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:19] – ↷ Page déplacée de nsi:tds:bezier à nsi:tds:maths:splines:bezier goupillwikinsi:tds:maths:splines:bezier [2023/01/22 19:25] (Version actuelle) goupillwiki
Ligne 12: Ligne 12:
 On se donne une série de points. On veut faire passer une courbe par ces points. La solution la plus simple est de tracer des segments entre les points. On se donne une série de points. On veut faire passer une courbe par ces points. La solution la plus simple est de tracer des segments entre les points.
  
-{{ :nsi:tds:bezier-1.png?nolink&400 |}}+{{ :nsi:tds:maths:splines:bezier-1.png?nolink&400 |}}
  
 Mais ce n'est pas très satisfaisant. On voudrait une courbe plus souple, plus arrondie. Avec les courbes de Bézier, on ajoute des points de contrôles permettant de préciser les tangentes désirées. Mais ce n'est pas très satisfaisant. On voudrait une courbe plus souple, plus arrondie. Avec les courbes de Bézier, on ajoute des points de contrôles permettant de préciser les tangentes désirées.
  
-{{ :nsi:tds:bezier-2.png?nolink&400 |}}+{{ :nsi:tds:maths:splines:bezier-2.png?nolink&400 |}}
  
 Les points en bleu sont les points par lesquels la courbe passe. Les points en jaune indiquent les tangentes. Il n'y a rien de plus à ajouter. Les points en bleu sont les points par lesquels la courbe passe. Les points en jaune indiquent les tangentes. Il n'y a rien de plus à ajouter.
Ligne 27: Ligne 27:
 p_3$. $P_1$ et $P_2$ sont des points de contrôle. p_3$. $P_1$ et $P_2$ sont des points de contrôle.
  
-{{ :nsi:tds:bezier-3.png?nolink&400 |}}+{{ :nsi:tds:maths:splines:bezier-3.png?nolink&400 |}}
  
  
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.1674044396.txt.gz · Dernière modification : de goupillwiki