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]);