Splines Catmull-Rom

La méthode de Catmull-Rom splines permet d’approximer une série de points (appelés points de contrôle) avec une courbe continue qui est définie par morceaux. Une des propriétés de cette méthode est qu’elle permet de passer par tous les points de contrôle.

Mise en équations

Deux points sont nécessaires de chaque côté de la portion que l’on souhaite interpoller. En d’autres termes, il faut disposer des points P_{i-1} et P_{i+2} pour calculer la spline entre les points P_i et P_{i+1}.

SplineCatmullRom

Considérons les points P_{i-1}, P_{i}, P_{i+1} et P_{i+2}. Les coordonnées du point P situé entre P_i et P_{i+1} sont calculées de la façon suivante:

 P = \frac{1}{2} . \left[ \begin{matrix} 1 & t & t^2 & t^3 \end{matrix} \right].\left[ \begin{matrix} 0 & 2 & 0 & 0 \\-1 & 0 & 1 & 0 \\2 & -5 & 4 & -1 \\-1 & 3 & -3 & 1\end{matrix} \right].\left[ \begin{matrix} P_{i-1} & P_{i} & P_{i+1} & P_{i+2}\end{matrix} \right]^\top

Cas général : tension

L’équation précédente est un cas particulier de la généralisation donnée par la matrice suivante:

 P = \left[ \begin{matrix} 1 & t & t^2 & t^3 \end{matrix} \right].\left[ \begin{matrix} 0 & 1 & 0 & 0 \\-\tau & 0 & \tau & 0 \\2.\tau & \tau-3 & 3-2\tau & -\tau \\-\tau & 2-\tau & \tau-2 & \tau\end{matrix} \right].\left[ \begin{matrix} P_{i-1} & P_{i} & P_{i+1} & P_{i+2}\end{matrix} \right]^\top

Le paramètre \tau modifie la tension de la courbe. La figure suivante illustre l’influence du paramètre \tau sur la courbe. \tau=\frac{1}{2} est une valeur couramment utilisée pour un résultat générique (comme dans le cas particulier présenté précédemment).

Tau_0 Tau_0_25 Tau_0_5
\tau=0
\tau=0.25
\tau=0.5

Tau_0_75 Tau_1 Tau_2
\tau=0.75
\tau=1
\tau=2

Derivation

Etant donné que la courbe est de classe C^1 il est possible de déterminer la dérivée pour toutes les valeurs de t. De plus, comme la courbe est définie par un polynôme, le calcul de la dérivée en un point est relativement trivial:

 P = \left[ \begin{matrix} 0 & 1 & 2.t & 3.t^2 \end{matrix} \right].\left[ \begin{matrix} 0 & 1 & 0 & 0 \\-\tau & 0 & \tau & 0 \\2.\tau & \tau-3 & 3-2\tau & -\tau \\-\tau & 2-\tau & \tau-2 & \tau\end{matrix} \right].\left[ \begin{matrix} P_{i-1} & P_{i} & P_{i+1} & P_{i+2}\end{matrix} \right]^\top

example_derivative

Propriétés

La courbe passe par tous les points de contrôle.
La courbe est de classe C^1.
La courbe n’est pas de classe C^2.
La courbe n’est pas incluse dans l’enveloppe convexe des points de contrôle.

Exemples

example1 example2
exemple3 exemple4
Spline3D

Download


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *