#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> |
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,
and because every 2*deg consecutive knot values defines a segment, we have
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,
and because the control points are periodic, we have
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.
|
|
|
1.2.18