Comparison with B-spline A Catmull–Rom spline curve is interpolation that passes through its defining points, whereas a B-spline curve is approximation that do not pass through its control points. Below are, from left, an example of blending functions, basis functions before shifting, and a curve of cubic uniform B-spline.
Continuity A Catmull–Rom spline curve is C1 continuous by its definition and the following, but not C2 continuous: : {\mathbf{F}}_k'(1) = \frac{1}{2} \begin{bmatrix} 0 & -1 & 0 & 1 \end{bmatrix} \begin{bmatrix} {\mathbf{p}}_{k-1} \\ {\mathbf{p}}_k \\ {\mathbf{p}}_{k+1} \\ {\mathbf{p}}_{k+2} \end{bmatrix} = {\mathbf{F}}_{k+1}'(0) = \frac{1}{2} \begin{bmatrix} -1 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} {\mathbf{p}}_k \\ {\mathbf{p}}_{k+1} \\ {\mathbf{p}}_{k+2} \\ {\mathbf{p}}_{k+3} \end{bmatrix} : {\mathbf{F}}_k''(1) = \begin{bmatrix} -1 & 4 & -5 & 2 \end{bmatrix} \begin{bmatrix} {\mathbf{p}}_{k-1} \\ {\mathbf{p}}_k \\ {\mathbf{p}}_{k+1} \\ {\mathbf{p}}_{k+2} \end{bmatrix} \neq {\mathbf{F}}_{k+1}''(0) = \begin{bmatrix} 2 & -5 & 4 & -1 \end{bmatrix} \begin{bmatrix} {\mathbf{p}}_k \\ {\mathbf{p}}_{k+1} \\ {\mathbf{p}}_{k+2} \\ {\mathbf{p}}_{k+3} \end{bmatrix}
Self-intersection If the difference in the intervals between the defining points is large in the middle of a curve, cusps or self-intersections may occur. Below is an example of a self-intersection:
Converting to Bézier curve Since the matrix form of a cubic Bézier curve is: : \mathbf{P}(t)= \begin{bmatrix} t^3 & t^2 & t & 1 \end{bmatrix} \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 3 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} {\mathbf{p_{bz}}}_0 \\ {\mathbf{p_{bz}}}_1 \\ {\mathbf{p_{bz}}}_2 \\ {\mathbf{p_{bz}}}_3 \end{bmatrix} the control points of a cubic Bézier curve equivalent to the Catmull–Rom spline curve are: : \begin{bmatrix} {\mathbf{p_{bz}}}_0 \\ {\mathbf{p_{bz}}}_1 \\ {\mathbf{p_{bz}}}_2 \\ {\mathbf{p_{bz}}}_3 \end{bmatrix} = \begin{bmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 3 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix} ^{-1} \frac{1}{2} \begin{bmatrix} -1 & 3 & -3 & 1 \\ 2 & -5 & 4 & -1 \\ -1 & 0 & 1 & 0 \\ 0 & 2 & 0 & 0 \end{bmatrix} \begin{bmatrix} {\mathbf{p}}_{k-1} \\ {\mathbf{p}}_k \\ {\mathbf{p}}_{k+1} \\ {\mathbf{p}}_{k+2} \end{bmatrix} = \frac{1}{6} \begin{bmatrix} 0 & 6 & 0 & 0 \\ -1 & 6 & 1 & 0 \\ 0 & 1 & 6 & -1 \\ 0 & 0 & 6 & 0 \end{bmatrix} \begin{bmatrix} \mathbf{p}_{k-1} \\ \mathbf{p}_k \\ \mathbf{p}_{k+1} \\ \mathbf{p}_{k+2} \end{bmatrix} == Extension to Surfaces (
bicubic interpolation) ==