Outils pour utilisateurs

Outils du site


nsi:tds:maths:splines:catmull_rom

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:catmull_rom [2023/01/22 19:20] goupillwikinsi:tds:maths:splines:catmull_rom [2023/01/22 19:32] (Version actuelle) goupillwiki
Ligne 14: Ligne 14:
  
 À l'usage, on réalise que cette méthode donne de bons résultats mais les courbes obtenues sont un peu trop tordues. On bricole un peu et on décide de choisir comme vecteur tangent $\tau\overrightarrow{P_{i-1}P_{i+1}}$ où $\tau$ est un réglage à choisir entre $0$ et $1$. $\tau = 0,5$ est par exemple un bon choix. À l'usage, on réalise que cette méthode donne de bons résultats mais les courbes obtenues sont un peu trop tordues. On bricole un peu et on décide de choisir comme vecteur tangent $\tau\overrightarrow{P_{i-1}P_{i+1}}$ où $\tau$ est un réglage à choisir entre $0$ et $1$. $\tau = 0,5$ est par exemple un bon choix.
 +
 +$\tau$ est appelé **tension**.
  
 ===== Problème des extrémités ===== ===== Problème des extrémités =====
Ligne 75: Ligne 77:
  
 class Catmullrom: class Catmullrom:
-    TAU = 0.5 +    def __init__(self, pts, tau = 0.5):
-    def __init__(self, pts):+
         '''         '''
         pts: liste de paires (x,y) représentant les points         pts: liste de paires (x,y) représentant les points
 +        tau: tension de la spline. Par défaut 0.5
         '''         '''
         assert len(pts) >= 2, "Il faut au moins deux points dans la spline."         assert len(pts) >= 2, "Il faut au moins deux points dans la spline."
         self.points = [Point(x,y) for x,y in pts]         self.points = [Point(x,y) for x,y in pts]
 +        assert 0 <= tau <= 1
 +        self.tau = tau
          
-    def curve_points(self): 
-        ''' 
-        renvoie la liste des points de self.points qui sont des points de la courbe 
-        ''' 
- 
     def get_point(self, i):     def get_point(self, i):
         '''         '''
Ligne 157: Ligne 156:
  
 <code python> <code python>
-demoplot.py+democatmullrom.py
 # démonstration en utilisant matplotlib # démonstration en utilisant matplotlib
  
Ligne 165: Ligne 164:
 pts = [(10,50), (200, 400), (300, 300), (500, 200)] pts = [(10,50), (200, 400), (300, 300), (500, 200)]
  
-= Catmullrom(pts)+spline = Catmullrom(pts)
  
 # tracé de la courbe # tracé de la courbe
-pts s.plot_points()+plot_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 plot_pts 
-y = [pt.y for pt in pts]+y = [pt.y for pt in plot_pts ]
 plt.plot(x, y) plt.plot(x, y)
  
 # tracé des points : # tracé des points :
-pts_curve = s.curve_points() +x = [x for x, y in pts] 
-x = [pt.x for pt in pts] +y = [y for x, y in pts]
-y = [pt.y for pt in pts]+
 plt.scatter(x, y, c='b') plt.scatter(x, y, c='b')
  
nsi/tds/maths/splines/catmull_rom.1674411606.txt.gz · Dernière modification : de goupillwiki