Splines avec la méthode de 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}\).

Principe général d'une Spline créée avec la méthode Catmull-Rom et ses points de contrôle

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).

Effet de la tension sur les splines avec la méthode de Catmull-Rom

Dérivation

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 $$

Illustration des dérivées de splines avec la méthode Catmull-Rom

Propriétés

Exemples

Voici un exemple simple de spline avec la méthode de Catmull-Rom (et de sa dérivée) créé avec Matlab :

Simple exemple de spline avec Catmull-Rom sous MATLAB Dérivée de l'exemple de spline avec Catmull-Rom sous MATLAB

Courbe fermée (avec sa dérivée) :

Trajectoire fermée avec Catmull-Rom sous MATLAB Dérivée d'une trajectoire fermée avec Catmull-Rom sous MATLAB

Exemple de spline 3D avec Catmull-Rom :

Exemple de trajectoire en 3D avec Catmull-Rom

Téléchargement


Dernière mise à jour : 14/03/2021