An implementation of B-splines. More...
Public Member Functions | |
BSpline (const pointField &knots, const bool notImplementedClosed=false) | |
Construct from components. More... | |
point | position (const scalar lambda) const |
The point position corresponding to the global curve parameter. More... | |
point | position (const label segment, const scalar lambda) const |
The point position corresponding to the local lambda (0-1) on the given segment. More... | |
scalar | length () const |
The length of the curve. More... | |
Public Member Functions inherited from polyLine | |
polyLine (const pointField &points, const bool notImplementedClosed=false) | |
Construct from components. More... | |
polyLine (const point &start, const pointField &intermediate, const point &end, const bool notImplementedClosed=false) | |
Construct from begin, intermediate, end points. More... | |
const pointField & | points () const noexcept |
Return const-access to the control-points. More... | |
label | nSegments () const noexcept |
The number of line segments. More... | |
point | position (const scalar) const |
The point position corresponding to the curve parameter. More... | |
point | position (const label segment, const scalar) const |
The point position corresponding to the local parameter. More... | |
scalar | length () const noexcept |
The length of the curve. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from polyLine | |
static tmp< pointField > | concat (const point &start, const pointField &intermediate, const point &end) |
Concatenate begin, intermediate and end points. More... | |
Protected Member Functions inherited from polyLine | |
void | calcParam () |
Precalculate the rational cumulative parameter value and the line-length. More... | |
label | localParameter (scalar &lambda) const |
Return the line segment and the local parameter [0..1] corresponding to the global lambda [0..1]. More... | |
Protected Attributes inherited from polyLine | |
pointField | points_ |
The control points or ends of each segments. More... | |
scalar | lineLength_ |
The real (total) line length. More... | |
scalarList | param_ |
The rational (0-1) cumulative parameter value for each point. More... | |
An implementation of B-splines.
In this implementation, the end tangents are created automatically by reflection.
In matrix form, the local interpolation on the interval t=[0..1] is described as follows:
P(t) = 1/6 * [ t^3 t^2 t 1 ] * [ -1 3 -3 1 ] * [ P-1 ] [ 3 -6 3 0 ] [ P0 ] [ -3 0 3 0 ] [ P1 ] [ 1 4 1 0 ] [ P2 ]
Where P-1 and P2 represent the neighbouring points or the extrapolated end points. Simple reflection is used to automatically create the end points.
The spline is discretized based on the chord length of the individual segments. In rare cases (sections with very high curvatures), the resulting distribution may be sub-optimal.
A future implementation could also handle closed splines.
|
explicit |
Foam::point position | ( | const scalar | lambda | ) | const |
The point position corresponding to the global curve parameter.
0 <= lambda <= 1
Definition at line 38 of file BSpline.C.
References UList< T >::first(), lambda(), UList< T >::last(), polyLine::localParameter(), Foam::constant::physicoChemical::mu, and polyLine::points().
Referenced by BSplineEdge::position().
Foam::point position | ( | const label | segment, |
const scalar | lambda | ||
) | const |
The point position corresponding to the local lambda (0-1) on the given segment.
Definition at line 57 of file BSpline.C.
References UList< T >::first(), UList< T >::last(), Foam::constant::physicoChemical::mu, p0, and points.
Foam::scalar length | ( | ) | const |
The length of the curve.
Definition at line 127 of file BSpline.C.
References NotImplemented.
Referenced by BSplineEdge::length().
Copyright © 2011-2018 OpenFOAM | OPENFOAM® is a registered trademark of OpenCFD Ltd.