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.
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}\).
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 $$
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).
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 $$
Voici un exemple simple de spline avec la méthode de Catmull-Rom (et de sa dérivée) créé avec Matlab :
Courbe fermée (avec sa dérivée) :
Exemple de spline 3D avec Catmull-Rom :