TP5 : Uniform B-splines as Subvidision Curves

11 March 2016 in



git pull

or, if you don’t have the local repo,

git clone

As usual, test by

cd TP5/
mkdir build
cd build
cmake ..
./geonum_TP5 simple

Uniform B-splines

In TP3, you have implemented the De Boor’s algorithm for evaluation of general B-splines. Now, let’s have a look at a particular subclass of B-spline curves, characterized by the uniform knot vector $t_i = i \; \; \forall i \in \mathbb Z$; have a look at the basis induced by such vector.

Your today’s task will be to implement these uniform B-splines as subdivision curves.

Subdivision algorithm

For a given degree $k$, the following constitutes one subdivision step passing from a polygon with $p$ points $\left\lbrace x_i^n \right\rbrace_{i=0}^{p-1}$ to a polygon with $2p$ points $\left\lbrace x_i^{n+1} \right\rbrace_{i=0}^{2p-1}$.

Double the points :

Average $k$ times :

Replace :

This procedure is sometimes refered to as the Lane–Riesenfeld algorithm.


With increasing degree, the Stanford bunny becomes smoother and smoother. Here, the degree runs from 2 to 20 and back.


  1. Implement the subdivision algorithm for (closed) uniform B-spline curves. Test with various values of the degree $k$.
  2. Simplify the scheme for $k=2$. What do you observe?