Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Examples  

TensorBlossom.H File Reference

Define tensor of piecewise blossoms (one in each direction). The diagonalization of which is NURB tensor manifold. More...

#include <xstl.H>
#include <TensorManifold.H>
#include <Vector.H>
#include <Combinatory.H>

Go to the source code of this file.

Namespaces

namespace  xchen

Defines

#define SubMFType   TensorBlossom<dims-1,from_sp_dims>


Detailed Description

Define tensor of piecewise blossoms (one in each direction). The diagonalization of which is NURB tensor manifold.

Here is a brief explanation of blossom(all notations are regarding to some fixed direction).

A piecewise blossom is a piecewise mulitlinear function, each of the same multi-varity. The break point is decided from the original knot vector. The knot insertion later on does not create any new discontinuity.

Every subsequence of knotvector with lenght of (2 * deg) defines a piece of multilinear function, the diagonalization of which defines a polynomial piece, with domain value of the middle pair knot values in this subsequence. If the pair has the same knot value, this segment is empty (and continuity dec by 1).

The blossom is completely defined, except for only one piece case, where control_points might not be enough.

Because every deg consecutive knot values defines a control point, we have,

Num_Of_CtlPnts = Len_Of_knotVec - Degree + 1,

and because every 2*deg consecutive knot values defines a segment, we have

Num_Of_Segments = Len_Of_knotVec - 2 * Degree + 1 = Num_Of_CtlPnts - Degree,

For periodic end condition, we should use the following special equations instead of the above two.

Because every control point is related to a Greville abscissae value, and we need an extra knot at the end which is effectively the same as the first knot value, we have,

Num_Of_CtlPnts + 1 = Len_Of_knotVec,

and because the control points are periodic, we have

Num_Of_Segments = Num_Of_CtlPnts,

Note that Insert(), Subdivide() are considered to be const methods, as they only make changes to subdvision data, but the original control mesh and knot vector keep unchanged, so the Blossom are still the same Blossom. Meanwhile,Evaluate() is not const method, because the blossom decrese multi-varity by 1, and ctl_mesh and ctl_knotvector shrink correspondingly. NURBevalutate() is designed for evaluation on the diagonalization of the Blossom, and henceforth a const method.

Author:
Xianming Chen
Computer Science Department
University of Utah
Date:
22 Feb 2004

Define Documentation

#define SubMFType   TensorBlossom<dims-1,from_sp_dims>
 


Generated on Wed Apr 7 21:40:50 2004 by doxygen1.2.18