Next: Rational B-splines
Up: Some Mathematics for Advanced
Previous: Bezier curves
Subsections
B-splines are a more general type of curve than Bezier curves. In a
B-spline each control point is associated with a basis function.
 |
(87) |
There are n + 1 control points,
.
The Ni,k basis functions are of order k(degree k-1). k must be at least 2 (linear), and can be no more
than n+1 (the number of control points). The important point here is
that the order of the curve (linear, quadratic, cubic,...) is
therefore not dependent on the number of control points (which it is
for Bezier curves, where k must always equal n+1).
Equation 87 defines a piecewise continuous
function. A knot vector,
,
must
be specified. This determines the values of t at which the pieces of
curve join, like knots joining bits of string. It is necessary that:
 |
(88) |
The Ni,k depend only on the value of k and the values in
the knot vector. N is defined recursively as:
Ni,1(t) |
= |
 |
|
Ni,k(t) |
= |
 |
(89) |
This is essentially a modified version of the idea of taking linear
interpolations of linear interpolations of linear interpolations
n
At this point it would be instructive for you to work out N1,1,
N2,1, N3,1, N1,2, N2,2, N1,3 for the knot
vector (0,2,3,6). It helps if you draw the graphs for these
functions.
There are several things that you should note about these
equations. Each
Ni,k(t) depends only on the k+1 knot values
from ti to ti+k.
Ni,k(t)=0 for t < ti or
so
only influences the curve for
.
Formally,
is a polynomial of order k (degree
k-1) on each interval
.
Across the knots
is Ck-2-continuous.
is, of course,
continuous in all its derivatives between the knots.
is
validly defined for
where
and
.
Even more properties of B-splines are
described in Rogers and Adams pp. 306-7.
The above explanation shows that the knot vector is very
important. The knot vector can, by its definition, be any sequence of
numbers provided that each one is greater than or equal to the
preceding one. Some types of knot vector are more useful than
others. Knot vectors are generally placed into one of three
categories: uniform, open uniform, and non-uniform.
- Uniform.
- These are knot vectors for which
 |
(90) |
For example:
- Open Uniform.
- These are uniform knot vectors which have kequal knot values at each end:
 |
(91) |
For example:
- Non-uniform.
- This is the general case, the only constraint
being the standard
(Equations 88). For example:
The shapes of the Ni,k basis functions are determined entirely by
the relative spacing between the knots. Scaling
(
)
or translating (
)
the knot vector has no effect on the shapes of the
Ni,k.
The above gives a description of the various types of knot vector but
it doesn't really give you any insight into how the knot vector
determines the shape of the curve. The following subsections look at
the different types of knot vector in more detail. However, the best
way to get to feel for these is to derive and draw the basis functions
yourself.
For simplicity, let ti = i (this is allowable given that the
scaling or translating the knot vector has no effect on the shapes of
the Ni,k). The knot vector thus becomes
and
Equation 89 simplifies to:
Ni,1(t) |
= |
 |
|
Ni,k(t) |
= |
 |
(92) |
You should be easily able to graph the first few of these for
yourself.
The principle thing to note about the uniform basis functions is that,
for a given order k, the basis functions are simply shifted versions
of one another.
With a uniform B-spline, you obviously cannot change the basis
functions (they are fixed because all the knots are
equispaced). However you can alter the shape of the curve by modifying
a number of things:
- Moving control points.
- Moving the control points obviously
changes the shape of the curve.
- Multiple control points.
- Sticking two adjacent control points on
top of one another causes the curve to pass closer to that
point. Stick enough adjacent control points on top of one another and
you can make the curve pass through that point.
- Order.
- Increasing the order k increases the continuity of the
curve at the knots, increases the smoothness of the curve, and tends
to move the curve farther from its defining polygon.
- Joining the ends.
- You can join the ends of the curve to make a
closed loop. Say you have M points,
.
You want a closed B-spline defined by
these points. For a given order, k, you will need M+(k-1) control
points (repeating the first k-1 points):
.
Your
knot vector will thus have M+2k-1 uniformly spaced knots.
The previous section intimated that uniform B-splines can be used to
describe closed curves: all you have to do is join the ends as
described above. If you do not want a closed curve, and you use a
uniform knot vector, you find that you need to specify control points
at each end of the curve which the curve doesn't go near.
If you wish your B-spline to start and end at your first and last
control points then you need an open uniform knot vector. The only
difference between this and the uniform knot vector being that the
open uniform version has k equal knots at each end.
An order k open uniform B-spline with n+1=k points is the Bezier
curve of order k. It would be a useful exercise for you to prove
this for k=3. For ease of calculation take the knot vector to be
[0,0,0,1,1,1].
It may help, at this stage, to compare a particular uniform and an
equivalent open uniform knot vector. Unfortunately the translation
from LaTeX to HTML couldn't cope with this section of the notes, so it
has had to be deleted. It appears in the paper version.
Any B-spline whose knot vector is neither uniform nor open uniform is
non-uniform. Non-uniform knot vectors allow any spacing of the knots,
including multiple knots (adjacent knots with the same value). We need
to know how this non-uniform spacing affects the basis functions in
order to understand where non-uniform knot vectors could be useful. It
transpires that there are only three cases of any interest: (1)
multiple knots (adjacent knots equal); (2) adjacent knots more closely
spaced than the next knot in the vector; and (3) adjacent knots less
closely spaced than the next knot in the vector. Obviously, case (3)
is simply case (2) turned the other way round.
- Multiple knots.
- A multiple knot reduces the degree of
continuity at that knot value. Across a normal knot the continuity is
Ck-2. Each extra knot with the same value reduces continuity at
that value by one. This is the only way to reduce the continuity of
the curve at the knot values. If there are k-1 (or more) equal knots
then you get a discontinuity in the curve.
- Close knots.
- As two knots' values get closer together, relative
to the spacing of the other knots, the curve moves closer to the
related control point.
- Distant knots.
- As two knots' values get further apart, relative
to the spacing of the other knots, the curve moves further away from
the related control point.
Standard procedure is to use uniform or open uniform B-splines unless
there is a very good reason not to do so. Moving two knots closer
together tends to move the curve only slightly and so there is usually
little point in doing it. This leads to the conclusion that the main
use of non-uniform B-splines is to allow for multiple knots, which
adjust the continuity of the curve at the knot values.
However, non-uniform B-splines are the general form of the B-spline
because they incorporate open uniform and uniform B-splines as special
cases. Thus we will talk about non-uniform B-splines when we
mean the general case, incorporating both uniform and open uniform.
- Move the control points.
- Add or remove control points.
- Use multiple control points.
- Change the order, k.
- Change the type of knot vector.
- Change the relative spacing of the knots.
- Use multiple knot values in the knot vector.
If there are no pressing reasons for doing otherwise, your B-spline
should be defined as follows:
- k=4 (cubic);
- no multiple control points;
- uniform (for a closed curve) or open uniform (for an open curve)
knot vector.
We generalise from B-spline curves to B-spline surfaces in the same
way as we did for Bezier patches. Take a tensor product of two
versions of Equation 87.
 |
(93) |
where it is usual for the patch to have the same order (i.e. k=l) in
both directions.
Next: Rational B-splines
Up: Some Mathematics for Advanced
Previous: Bezier curves
nad@cl.cam.ac.uk