Brick
Loading...
Searching...
No Matches
SplineBase Class Referenceabstract

#include <spline_base.h>

Description

Abstract base class for parametric 2D Hermite splines.

Provides arc-length parameterization, heading, curvature, sampling, and high-accuracy Gauss-Legendre quadrature integration.

Inheritance diagram for SplineBase:

Public Member Functions

virtual Translation2d position (double u) const =0
 Computes 2D position at spline parameter u.
virtual Translation2d velocity (double u) const =0
 Computes 2D parametric velocity (first derivative) at parameter u.
virtual Translation2d acceleration (double u) const =0
 Computes 2D parametric acceleration (second derivative) at parameter u.
Rotation2d heading (double u) const
 Computes heading angle theta at spline parameter u.
units::Curvature curvature (double u) const
 Computes path curvature at parameter u.
double length () const
 Returns total arc length of the spline in inches.
double u_from_s (double s) const
 Inverts arc distance s to spline parameter u.
SplineSample sample (double u) const
 Samples complete state (position, velocity, acceleration, heading, curvature) at parameter u.
SplineSample sample_by_s (double s) const
 Samples complete state at arc distance s.
std::vector< Translation2d > sample_by_count (int count) const
 Samples 2D positions uniformly spaced in parameter u.
std::vector< Translation2d > sample_by_spacing (double ds) const
 Samples 2D positions uniformly spaced by arc distance ds.

Protected Member Functions

double integrate_segment_length (double u0, double u1) const
 Computes high-accuracy arc length over sub-interval [u0, u1] using 5-point Gauss-Legendre quadrature.
void build_arc_table_recursive (double u0, double u1, double s0, double segment_length, double max_err)
 Recursively builds the arc table to satisfy a linear interpolation error bound.
void build_arc_table (double max_err=1e-4)
 Builds pre-computed parameter u and arc-length lookup tables using adaptive refinement.

Static Protected Member Functions

template<size_t N>
static double eval_poly (const std::array< double, N > &coeffs, double u)
 Evaluates polynomial P(u) using Horner's method.
template<size_t N>
static double eval_poly_derivative (const std::array< double, N > &coeffs, double u)
 Evaluates first derivative P'(u) using Horner's method.
template<size_t N>
static double eval_poly_second_derivative (const std::array< double, N > &coeffs, double u)
 Evaluates second derivative P''(u) using Horner's method.
static double clamp_u (double u)
static double clamp_value (double value, double lo, double hi)

Member Function Documentation

◆ acceleration()

virtual Translation2d SplineBase::acceleration ( double u) const
pure virtual

Computes 2D parametric acceleration (second derivative) at parameter u.

Parameters
uParameter in range [0, 1].
Returns
Second derivative vector (d^2x/du^2, d^2y/du^2).

Implemented in HermiteSpline< Order >, HermiteSpline< 3 >, and HermiteSpline< 5 >.

◆ build_arc_table()

void SplineBase::build_arc_table ( double max_err = 1e-4)
inlineprotected

Builds pre-computed parameter u and arc-length lookup tables using adaptive refinement.

Parameters
max_errMaximum allowable interpolation error in inches.

◆ curvature()

units::Curvature SplineBase::curvature ( double u) const
inline

Computes path curvature at parameter u.

Parameters
uParameter in range [0, 1].
Returns
units::Curvature in rad/meter.

◆ eval_poly()

template<size_t N>
double SplineBase::eval_poly ( const std::array< double, N > & coeffs,
double u )
inlinestaticprotected

Evaluates polynomial P(u) using Horner's method.

Note
Loop iterates backwards (from highest degree to lowest: coeffs[N-1] down to coeffs[0]) which is the correct iteration order for Horner's method.

◆ heading()

Rotation2d SplineBase::heading ( double u) const
inline

Computes heading angle theta at spline parameter u.

Parameters
uParameter in range [0, 1].
Returns
Rotation2d heading angle.

◆ length()

double SplineBase::length ( ) const
inline

Returns total arc length of the spline in inches.

Returns
Total arc length.

◆ position()

virtual Translation2d SplineBase::position ( double u) const
pure virtual

Computes 2D position at spline parameter u.

Parameters
uParameter in range [0, 1].
Returns
2D position vector.

Implemented in HermiteSpline< Order >, HermiteSpline< 3 >, and HermiteSpline< 5 >.

◆ sample()

SplineSample SplineBase::sample ( double u) const
inline

Samples complete state (position, velocity, acceleration, heading, curvature) at parameter u.

Parameters
uParameter in range [0, 1].
Returns
SplineSample struct.

◆ sample_by_count()

std::vector< Translation2d > SplineBase::sample_by_count ( int count) const
inline

Samples 2D positions uniformly spaced in parameter u.

Parameters
countNumber of sample points.
Returns
Vector of 2D translation points.

◆ sample_by_s()

SplineSample SplineBase::sample_by_s ( double s) const
inline

Samples complete state at arc distance s.

Parameters
sArc distance in inches.
Returns
SplineSample struct.

◆ sample_by_spacing()

std::vector< Translation2d > SplineBase::sample_by_spacing ( double ds) const
inline

Samples 2D positions uniformly spaced by arc distance ds.

Parameters
dsArc distance step in inches.
Returns
Vector of 2D translation points.

◆ u_from_s()

double SplineBase::u_from_s ( double s) const
inline

Inverts arc distance s to spline parameter u.

Parameters
sArc distance along spline in inches.
Returns
Spline parameter u in range [0, 1].

◆ velocity()

virtual Translation2d SplineBase::velocity ( double u) const
pure virtual

Computes 2D parametric velocity (first derivative) at parameter u.

Parameters
uParameter in range [0, 1].
Returns
First derivative vector (dx/du, dy/du).

Implemented in HermiteSpline< Order >, HermiteSpline< 3 >, and HermiteSpline< 5 >.


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