CatmullRomSpline Class Reference

An implementation of Catmull-Rom splines (sometimes known as Overhauser splines). More...

Inheritance diagram for CatmullRomSpline:

Collaboration diagram for CatmullRomSpline:

## Public Member Functions | |

CatmullRomSpline (const pointField &knots, const bool notImplementedClosed=false) | |

Construct from components. More... | |

point | position (const scalar lambda) const |

Return the point position corresponding to the curve parameter. More... | |

point | position (const label segment, const scalar lambda) const |

Return the point position corresponding to the local parameter. More... | |

scalar | length () const |

Return the length of the curve. More... | |

Public Member Functions inherited from polyLine | |

polyLine (const pointField &, const bool notImplementedClosed=false) | |

Construct from components. More... | |

const pointField & | points () const |

Return const-access to the control-points. More... | |

label | nSegments () const |

Return the number of line segments. More... | |

point | position (const scalar) const |

Return the point position corresponding to the curve parameter. More... | |

point | position (const label segment, const scalar) const |

Return the point position corresponding to the local parameter. More... | |

scalar | length () const |

Return the length of the curve. More... | |

## Additional Inherited Members | |

Protected Member Functions inherited from polyLine | |

void | calcParam () |

Precalculate the rational cumulative parameter value. More... | |

label | localParameter (scalar &lambda) const |

Return the line segment and the local parameter [0..1]. More... | |

Protected Attributes inherited from polyLine | |

pointField | points_ |

The control points or ends of each segments. More... | |

scalar | lineLength_ |

The real line length. More... | |

scalarList | param_ |

The rational (0-1) cumulative parameter value for each point. More... | |

An implementation of Catmull-Rom splines (sometimes known as Overhauser 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/2 * [ t^3 t^2 t 1 ] * [ -1 3 -3 1 ] * [ P-1 ] [ 2 -5 4 -1 ] [ P0 ] [ -1 0 1 0 ] [ P1 ] [ 0 2 0 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.

- See also
- http://www.algorithmist.net/catmullrom.html provides a nice introduction

- Source files

Definition at line 77 of file CatmullRomSpline.H.

CatmullRomSpline | ( | const pointField & | knots, |

const bool | notImplementedClosed = `false` |
||

) |

Construct from components.

Definition at line 33 of file CatmullRomSpline.C.

Foam::point position | ( | const scalar | lambda | ) | const |

Return the point position corresponding to the curve parameter.

0 <= lambda <= 1

Definition at line 44 of file CatmullRomSpline.C.

References lambda(), polyLine::localParameter(), Foam::constant::physicoChemical::mu, and polyLine::points().

Referenced by splineEdge::position().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::point position | ( | const label | segment, |

const scalar | lambda |
||

) | const |

Return the point position corresponding to the local parameter.

0 <= lambda <= 1 on the given segment

Definition at line 63 of file CatmullRomSpline.C.

References Foam::constant::physicoChemical::mu, p0, and points.

Foam::scalar length | ( | ) | const |

Return the length of the curve.

Definition at line 134 of file CatmullRomSpline.C.

References NotImplemented.

Referenced by splineEdge::length().

Here is the caller graph for this function:

The documentation for this class was generated from the following files:

- src/mesh/blockMesh/blockEdges/splineEdge/CatmullRomSpline.H
- src/mesh/blockMesh/blockEdges/splineEdge/CatmullRomSpline.C