B-spline

From Free net encyclopedia


Contents

Definition

Given m+1 knots ti with

<math>t_0 \le t_1 \le \ldots \le t_m </math>

a B-spline of degree n is a parametric curve

<math>\mathbf{S}:[t_0, t_m] \to \mathbb{R}^2</math>

composed of basis B-splines of degree n

<math>\mathbf{S}(t)= \sum_{i=0}^{m} \mathbf{P}_{i} b_{i,n}(t) \mbox{ , } t \in [t_0,t_m]</math>.

The Pi are called control points or de Boor points. A polygon can be constructed by connecting the de Boor points with lines, starting with P0 and finishing with Pm</sub>. This polygon is called the de Boor polygon.

The m-n basis B-splines of degree n can be defined using the Cox-de Boor recursion formula

<math>b_{j,0}(t) := \left\{

\begin{matrix} 1 & \mathrm{if} \quad t_j \leq t < t_{j+1} \\ 0 & \mathrm{otherwise} \end{matrix} \right. </math>

<math>b_{j,n}(t) := \frac{t - t_j}{t_{j+n} - t_j} b_{j,n-1}(t) + \frac{t_{j+n+1} - t}{t_{j+n+1} - t_{j+1}} b_{j+1,n-1}(t).</math>

When the knots are equidistant we say the B-spline is uniform otherwise we call it non-uniform.

Uniform B-spline

When the B-spline is uniform, the basis B-splines for a given degree n are just shifted copies of each other. An alternative non-recursive definition for the m-n basis B-splines is

<math>b_{j,n}(t) = b_n(t - t_j), \qquad\; j = 0, \ldots, m-n-1</math>

with

<math>b_{n}(t) := (n+1) \sum_{i=0}^{n+1} \omega_{i,n}(t - t_i)_+^{n} \,\; </math>

and

<math>\omega_{i,n} := \prod_{j=0, j \neq i}^{n+1} \frac{1}{t_j - t_i} \,\;</math>

where

<math>(t - t_i)_+^n \,\;</math>

is the truncated power function.

Notes

When the number of knots is the same as the degree, the B-Spline degenerates into a Bézier curve. The shape of the basis functions is determined by the position of the knots. Scaling or translating the knot vector does not alter the basis functions.

The spline is contained in the convex hull of its control points.

A basis B-spline of degree n

<math>b_{i,n}(t)\,\;</math>

is non-zero only in the interval [ti, ti+n+1] that is

<math>b_{i,n}(t) = \left\{\begin{matrix}

>0 & \mathrm{if} \quad t_{i} \le t < t_{i+n+1} \\ 0 & \mathrm{otherwise} \end{matrix} \right. </math> In other words if we manipulate one control point we only change the local behaviour of the curve and not the global behaviour as with Bézier curves.

Examples

Constant B-spline

The constant B-spline is the most simple spline. It is defined on only one knot span and is not even continuous on the knots. It is a just indicator function for the different knot spans.

<math>b_{j,0}(t) = 1_{[t_j,t_{j+1})} =

\left\{\begin{matrix} 1 & \mathrm{if} \quad t_j \le t < t_{j+1} \\ 0 & \mathrm{otherwise} \end{matrix} \right. </math>

Linear B-spline

The linear B-spline is defined on two consecutive knot spans and is continuous on the knots, but not differentiable.

<math>b_{j,1}(t) =

\left\{\begin{matrix} \frac{t - t_j}{t_{j+1} - t_j} & \mathrm{if} \quad t_j \le t < t_{j+1} \\ \frac{t_{j+2} - t}{t_{j+2} - t_{j+1}} & \mathrm{if} \quad t_{j+1} \le t < t_{j+2} \\ 0 & \mathrm{otherwise} \end{matrix} \right. </math>


Uniform quadratic B-spline

Quadratic B-splines with uniform knot-vector is a commonly used form of B-spline. The blending function can easily be precalculated, and is equal for each segment in this case.

<math>b_{j,2}(t) = \begin{cases} \frac{1}{2}t^2 \\ -t^2 + t + \frac{1}{2} \\ \frac{1}{2}(1-t)^2 \end{cases}</math>

Put in matrix-form, it is:

<math> \mathbf{S}_i(t) = \begin{bmatrix} t^2 & t & 1 \end{bmatrix} \frac{1}{2} \begin{bmatrix}

1 & -2 & 1 \\ -2 & 2 & 0 \\ 1 & 1 & 0 \end{bmatrix} \begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \end{bmatrix} </math> for <math>t \in [0,1]</math>

Cubic B-Spline

A B-spline formulation for a single segment can be written as:

<math>\mathbf{S}_{i} (t) = \sum_{k=0}^3 \mathbf{P}_{i-3+k} b_{i-3+k,3} (t) \qquad \mbox{ , } t \in [0,1]</math>

where Si is the ith B-spline segment and P is the set of control points, segment i and k is the local control point index. A set of control points would be <math>P_i^w = ( w_i x_i, w_i y_i, w_i z_i, w_i)</math> where the <math>w_i</math> is weight, pulling the curve towards control point <math>P_i</math> as it increases or moving the curve away as it decreases.

An entire set of segments, m-2 curves (<math>S_3,S_4,...,S_m</math>) defined by m+1 control points (<math>P_0,P_1,...,P_m, m \ge 3</math>), as one B-spline in t would be defined as:

<math>\mathbf{S}(t) = \sum_{i=0}^m \mathbf{P}_{i} b_{i,3} (t)</math>

where i is the control point number and t is a global parameter giving knot values. This formulation expresses a B-spline curve as a linear combination of B-spline basis functions, hence the name.

There are two types of B-spline - uniform and non-uniform. A non-uniform B-spline is a curve where the intervals between successive control points is not, or not necessarily, equal (the knot vector of interior knot spans are not equal). A common form is where intervals are successively reduced to zero, interpolating control points.

Uniform cubic B-splines

Cubic B-splines with uniform knot-vector is the most commonly used form of B-spline. The blending function can easily be precalculated, and is equal for each segment in this case. Put in matrix-form, it is:

<math> \mathbf{S}_i(t) = \begin{bmatrix} t^3 & t^2 & t & 1 \end{bmatrix} \frac{1}{6} \begin{bmatrix}

-1 & 3 & -3 & 1 \\

3 & -6 &  3 & 0 \\

-3 & 0 & 3 & 0 \\

1 &  4 &  1 & 0 \end{bmatrix}

\begin{bmatrix} \mathbf{p}_{i-1} \\ \mathbf{p}_{i} \\ \mathbf{p}_{i+1} \\ \mathbf{p}_{i+2} \end{bmatrix} </math> for <math>t \in [0,1]</math>

See also

External links

de:Spline#B-Splines fr:B-spline pl:Krzywa B-sklejana zh:B样条