36 : m_initialControlVector{xInitialControlVector, yInitialControlVector},
37 m_finalControlVector{xFinalControlVector, yFinalControlVector} {
38 const auto hermite = MakeHermiteBasis();
40 ControlVectorFromArrays(xInitialControlVector, xFinalControlVector);
42 ControlVectorFromArrays(yInitialControlVector, yFinalControlVector);
45 m_coefficients.template block<1, 4>(0, 0) = hermite * x;
46 m_coefficients.template block<1, 4>(1, 0) = hermite * y;
50 for (
int i = 0; i < 4; i++) {
55 m_coefficients.template block<2, 1>(2, i) =
56 m_coefficients.template block<2, 1>(0, i) * (3 - i);
59 for (
int i = 0; i < 3; i++) {
64 m_coefficients.template block<2, 1>(4, i) =
65 m_coefficients.template block<2, 1>(2, i) * (2 - i);
81 return m_initialControlVector;
90 return m_finalControlVector;
96 ControlVector m_initialControlVector;
97 ControlVector m_finalControlVector;
103 static constexpr Eigen::Matrix4d MakeHermiteBasis() {
124 return Eigen::Matrix4d{{+2.0, +1.0, -2.0, +1.0},
125 {-3.0, -2.0, +3.0, -1.0},
126 {+0.0, +1.0, +0.0, +0.0},
127 {+1.0, +0.0, +0.0, +0.0}};
139 static constexpr Eigen::Vector4d ControlVectorFromArrays(
142 return Eigen::Vector4d{{initialVector[0]},
#define WPILIB_DLLEXPORT
Definition SymbolExports.hpp:36
CubicHermiteSpline(wpi::util::array< double, 2 > xInitialControlVector, wpi::util::array< double, 2 > xFinalControlVector, wpi::util::array< double, 2 > yInitialControlVector, wpi::util::array< double, 2 > yFinalControlVector)
Constructs a cubic hermite spline with the specified control vectors.
Definition CubicHermiteSpline.hpp:32
const ControlVector & GetInitialControlVector() const override
Returns the initial control vector that created this spline.
Definition CubicHermiteSpline.hpp:80
Matrixd< 6, 3+1 > Coefficients() const override
Returns the coefficients matrix.
Definition CubicHermiteSpline.hpp:73
const ControlVector & GetFinalControlVector() const override
Returns the final control vector that created this spline.
Definition CubicHermiteSpline.hpp:89
constexpr Spline()=default
This class is a wrapper around std::array that does compile time size checking.
Definition array.hpp:26
Definition LinearSystem.hpp:20
Eigen::Matrix< double, Rows, Cols, Options, MaxRows, MaxCols > Matrixd
Definition EigenCore.hpp:21
array(T, Ts...) -> array< T, 1+sizeof...(Ts)>