37 : m_initialControlVector{xInitialControlVector, yInitialControlVector},
38 m_finalControlVector{xFinalControlVector, yFinalControlVector} {
39 const auto hermite = MakeHermiteBasis();
41 ControlVectorFromArrays(xInitialControlVector, xFinalControlVector);
43 ControlVectorFromArrays(yInitialControlVector, yFinalControlVector);
46 m_coefficients.template block<1, 4>(0, 0) = hermite * x;
47 m_coefficients.template block<1, 4>(1, 0) = hermite * y;
51 for (
int i = 0; i < 4; i++) {
56 m_coefficients.template block<2, 1>(2, i) =
57 m_coefficients.template block<2, 1>(0, i) * (3 - i);
60 for (
int i = 0; i < 3; i++) {
65 m_coefficients.template block<2, 1>(4, i) =
66 m_coefficients.template block<2, 1>(2, i) * (2 - i);
82 return m_initialControlVector;
91 return m_finalControlVector;
97 ControlVector m_initialControlVector;
98 ControlVector m_finalControlVector;
104 static constexpr Eigen::Matrix4d MakeHermiteBasis() {
125 return Eigen::Matrix4d{{+2.0, +1.0, -2.0, +1.0},
126 {-3.0, -2.0, +3.0, -1.0},
127 {+0.0, +1.0, +0.0, +0.0},
128 {+1.0, +0.0, +0.0, +0.0}};
140 static constexpr Eigen::Vector4d ControlVectorFromArrays(
142 return Eigen::Vector4d{{initialVector[0]},
#define WPILIB_DLLEXPORT
Definition SymbolExports.h:36
Represents a hermite spline of degree 3.
Definition CubicHermiteSpline.h:17
const ControlVector & GetInitialControlVector() const override
Returns the initial control vector that created this spline.
Definition CubicHermiteSpline.h:81
Matrixd< 6, 3+1 > Coefficients() const override
Returns the coefficients matrix.
Definition CubicHermiteSpline.h:74
CubicHermiteSpline(wpi::array< double, 2 > xInitialControlVector, wpi::array< double, 2 > xFinalControlVector, wpi::array< double, 2 > yInitialControlVector, wpi::array< double, 2 > yFinalControlVector)
Constructs a cubic hermite spline with the specified control vectors.
Definition CubicHermiteSpline.h:33
const ControlVector & GetFinalControlVector() const override
Returns the final control vector that created this spline.
Definition CubicHermiteSpline.h:90
Represents a two-dimensional parametric spline that interpolates between two points.
Definition Spline.h:27
This class is a wrapper around std::array that does compile time size checking.
Definition array.h:26
Eigen::Matrix< double, Rows, Cols, Options, MaxRows, MaxCols > Matrixd
Definition EigenCore.h:21