


NRBMAK: Construct the NURBS structure given the control points
and the knots.
Calling Sequence:
nurbs = nrbmak(cntrl,knots);
Parameters:
cntrl : Control points, these can be either Cartesian or
homogeneous coordinates.
For a curve the control points are represented by a
matrix of size (dim,nu) and for a surface a multidimensional
array of size (dim,nu,nv). Where nu is number of points along
the parametric U direction, and nv the number of points
along the V direction. Dim is the dimension valid options
are
2 .... (x,y) 2D Cartesian coordinates
3 .... (x,y,z) 3D Cartesian coordinates
4 .... (wx,wy,wz,w) 4D homogeneous coordinates
knots : Non-decreasing knot sequence spanning the interval
[0.0,1.0]. It's assumed that the curves and surfaces
are clamped to the start and end control points by knot
multiplicities equal to the spline order.
For curve knots form a vector and for a surface the knot
are stored by two vectors for U and V in a cell structure.
{uknots vknots}
nurbs : Data structure for representing a NURBS curve.
NURBS Structure:
Both curves and surfaces are represented by a structure that is
compatible with the Spline Toolbox from Mathworks
nurbs.form .... Type name 'B-NURBS'
nurbs.dim .... Dimension of the control points
nurbs.number .... Number of Control points
nurbs.coefs .... Control Points
nurbs.order .... Order of the spline
nurbs.knots .... Knot sequence
Note: the control points are always converted and stored within the
NURBS structure as 4D homogeneous coordinates. A curve is always stored
along the U direction, and the vknots element is an empty matrix. For
a surface the spline degree is a vector [du,dv] containing the degree
along the U and V directions respectively.
Description:
This function is used as a convenient means of constructing the NURBS
data structure. Many of the other functions in the toolbox rely on the
NURBS structure been correctly defined as shown above. The nrbmak not
only constructs the proper structure, but also checks for consistency.
The user is still free to build his own structure, in fact a few
functions in the toolbox do this for convenience.
Examples:
Construct a 2D line from (0.0,0.0) to (1.5,3.0).
For a straight line a spline of order 2 is required.
Note that the knot sequence has a multiplicity of 2 at the
start (0.0,0.0) and end (1.0 1.0) in order to clamp the ends.
line = nrbmak([0.0 1.5; 0.0 3.0],[0.0 0.0 1.0 1.0]);
nrbplot(line, 2);
Construct a surface in the x-y plane i.e
^ (0.0,1.0) ------------ (1.0,1.0)
| | |
| V | |
| | Surface |
| | |
| | |
| (0.0,0.0) ------------ (1.0,0.0)
|
|------------------------------------>
U
coefs = cat(3,[0 0; 0 1],[1 1; 0 1]);
knots = {[0 0 1 1] [0 0 1 1]}
plane = nrbmak(coefs,knots);
nrbplot(plane, [2 2]);