13 #ifndef _parameteric_curves_polynomial_hpp
14 #define _parameteric_curves_polynomial_hpp
16 #include <Eigen/Dense>
17 #include <boost/archive/text_iarchive.hpp>
18 #include <boost/archive/text_oarchive.hpp>
30 template <
typename Numeric = double, Eigen::Index Dim = 3,
31 typename Point = Eigen::Matrix<Numeric, Dim, 1> >
36 typedef std::vector<Point, Eigen::aligned_allocator<Point> >
t_point_t;
38 typedef Eigen::Matrix<double, Dim, Eigen::Dynamic>
coeff_t;
67 coefficients_(init_coeffs(coefficients.begin(), coefficients.end())),
82 template <
typename In>
107 if (this->
t_min > this->
t_max) std::out_of_range(
"TODO");
109 std::runtime_error(
"Spline order and coefficients do not match");
134 throw std::out_of_range(
"TODO");
138 std::size_t i =
order_ - 1;
141 while (ok &&
order_ != 0) {
158 const std::size_t& order)
const {
160 throw std::out_of_range(
"TODO");
165 for (std::size_t i = order; i <
order_ + 1; ++i, cdt *= dt)
166 currentPoint_ += cdt *
coefficients_.col(i) * fact(i, order);
167 return currentPoint_;
170 virtual const std::size_t&
size()
const {
return dim_; }
183 template <
class Archive>
184 void save(Archive& ar,
const unsigned int )
const {
185 ar& boost::serialization::make_nvp(
"dim",
dim_);
186 ar& boost::serialization::make_nvp(
"order",
order_);
187 ar& boost::serialization::make_nvp(
"coefficients",
coefficients_);
188 ar& boost::serialization::make_nvp(
"t_min", this->
t_min);
189 ar& boost::serialization::make_nvp(
"t_max", this->
t_max);
192 template <
class Archive>
193 void load(Archive& ar,
const unsigned int ) {
194 ar& boost::serialization::make_nvp(
"dim",
dim_);
195 ar& boost::serialization::make_nvp(
"order",
order_);
196 ar& boost::serialization::make_nvp(
"coefficients",
coefficients_);
197 ar& boost::serialization::make_nvp(
"t_min", this->
t_min);
198 ar& boost::serialization::make_nvp(
"t_max", this->
t_max);
201 BOOST_SERIALIZATION_SPLIT_MEMBER()
203 num_t fact(const std::
size_t n, const std::
size_t order)
const {
205 for (std::size_t i = 0; i < order; ++i) res *= n - i;
206 return static_cast<num_t>(res);
210 template <
typename In>
211 coeff_t init_coeffs(In zeroOrderCoefficient, In highestOrderCoefficient) {
213 std::distance(zeroOrderCoefficient, highestOrderCoefficient);
216 for (In cit = zeroOrderCoefficient; cit != highestOrderCoefficient;
void load(Archive &ar, Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > &m, const unsigned int)
Definition: eigen-matrix.hpp:50
void save(Archive &ar, const Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > &m, const unsigned int)
Definition: eigen-matrix.hpp:38
Definition: abstract-curve.hpp:16
Eigen::Matrix< Numeric, 3, 1 > Point
Definition: effector_spline.h:28
double Numeric
Definition: effector_spline.h:26
unsigned int fact(const unsigned int n)
Computes factorial of a number.
Definition: bernstein.h:24
Represents a curve of dimension Dim is Safe is false, no verification is made on the evaluation of th...
Definition: abstract-curve.hpp:21
virtual const time_t tmin() const
Definition: abstract-curve.hpp:47
virtual const time_t tmax() const
Definition: abstract-curve.hpp:48
time_t t_max
Definition: abstract-curve.hpp:65
time_t t_min
Definition: abstract-curve.hpp:64
Represents a Polynomialf arbitrary order defined on the interval [tBegin, tEnd]. It follows the equat...
Definition: polynomial.hpp:32
virtual bool setInitialPoint(const num_t &)
Definition: polynomial.hpp:173
Eigen::Ref< coeff_t > coeff_t_ref
Definition: polynomial.hpp:39
virtual const std::size_t & size() const
Definition: polynomial.hpp:170
virtual bool setInitialPoint(const point_t &)
Definition: polynomial.hpp:172
Polynomial(const t_point_t &coefficients, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:64
virtual const point_t derivate(const time_t &t, const std::size_t &order) const
Evaluation of the derivative spline at time t.
Definition: polynomial.hpp:157
Polynomial(const Polynomial &other)
Definition: polynomial.hpp:97
AbstractCurve< Numeric, Point > curve_abc_t
Definition: polynomial.hpp:37
Polynomial()
Definition: polynomial.hpp:73
std::size_t dim_
Definition: polynomial.hpp:177
Numeric time_t
Definition: polynomial.hpp:34
virtual const point_t operator()(const time_t &t) const
Evaluation of the cubic spline at time t using horner's scheme.
Definition: polynomial.hpp:132
Numeric num_t
Definition: polynomial.hpp:35
std::size_t order_
Definition: polynomial.hpp:178
Point point_t
Definition: polynomial.hpp:33
~Polynomial()
Destructor.
Definition: polynomial.hpp:93
Eigen::Matrix< double, Dim, Eigen::Dynamic > coeff_t
Definition: polynomial.hpp:38
coeff_t coefficients_
Definition: polynomial.hpp:176
Polynomial(In zeroOrderCoefficient, In out, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:83
friend class boost::serialization::access
Definition: polynomial.hpp:182
std::vector< Point, Eigen::aligned_allocator< Point > > t_point_t
Definition: polynomial.hpp:36
Polynomial(const coeff_t &coefficients, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:49