Given an initial control polygon we can define a refinement process that generates a sequence of control polygons from the original. In the limit, this sequence converges to the uniform B-spline curve specified by the original control polygon. By examining this refinement process from a different angle, we can specify a procedure that allows us to directly calculate points on the curve.
For a pdf version of these notes look
here.
Direct Calculation of Points on the Curve
In the cubic case, we define the general refinement procedure by classifying the points of a refinement as either ``vertex'' or ``edge'' points. Using this classification we can cleverly write this refinement process in a matrix form. This form takes a control point and its two adjacent control points of a refinement and applies a refinement matrix as follows
We call call this point
and note that it is equal to
.
Calculating the Limit Point
The suprising thing is that we can actually calculate this limit.
We utilize the fact that the refinement matrix can be
diagonalized,
which defines the matrix
by
To calculate the limit,
first consider applying
-times
![]() |
![]() |
||
![]() |
|||
![]() |
|||
![]() |
![]() |
![]() |
||
![]() |
|||
![]() |
|||
![]() |
In short, given any vertex
with corresponding edge points
and
, we can directly calculate points on the
curve by dotting the left eigenvector that corresponds to the
eigenvalue
by the vertex-edge vector
Examples
Consider a cubic uniform B-spline curve
with control polygon
. This
curve can be written as
Similarly we can calculate a point on the curve using the vertex
with
and
as the two respective edge points.
In this case, we find that this is exactly the point
on
the curve.
Carrying this one step further, suppose we generate one full refinement of the curve, generating new edge and vertex points.
These new points become the input to the
refinement process, and if we consider
as the vertex point,
with
and
as the respective edge points, we obtain the
point on the curve
![]() |
![]() |
||
![]() |
Summary
It is possible, using eigenanalysis, to formulate simple procedures that calculate directly a point on the limit curve. This, in many cases, can be used to replace the overall refinement process.
The tangent vector on the curve at this limit point can also be directly calculated, by much the same procedure.