# Catmull-Rom splines

The Catmull-Rom splines is a method that approximate a set of points (named control points) with a smooth polynomial function that is piecewise-defined. One of the properties of the Catmull-Rom spline is that the curve will pass through all of the control points.

## Equations

Two points on each side of the desired portion are required. In other words, points $$P_{i-1}$$ and $$P_{i+2}$$ are needed to calculate the spline between points $$P_i$$ and $$P_{i+1}$$.

Given points $$P_{i-1}$$, $$P_{i}$$, $$P_{i+1}$$ and $$P_{i+2}$$, the coordinates of a point $$P$$ located between $$P_i$$ and $$P_{i+1}$$ are calculated as:

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

## General case: tension

The previous equation is a particular case of the general geometry matrix given by the following equation:

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

The parameter $$\tau$$ modify the tension of the curve. The following figure illustrates the influence of the parameter $$\tau$$ on the curve. Note that $$\tau=\frac{1}{2}$$ is commonly used (as in the particular case presented previously).

## Derivative

As the spline is $$C^1$$ continuous it is possible to compute the derivative for any value of $$t$$. Moreover, as the definition of the spline is a polynomial, it is quite trivial to compute the derivative at a given point:

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

## Properties

• The spline passes through all of the control points.
• The spline is $$C^1$$ continuous.
• The spline is not $$C^2$$ continuous.
• The spline does not lie within the convex hull of their control points

## Examples

Here a simple example of Catmull-Rom spline (and its derivative) created with Matlab:

Closed-loop trajectory (with its derivative):

Example of 3D Catmull-Rom spline: