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;
223 #endif //_STRUCT_POLYNOMIAL time_t t_max
Definition: abstract-curve.hpp:65
virtual const time_t tmin() const
Definition: abstract-curve.hpp:47
Point point_t
Definition: abstract-curve.hpp:22
virtual bool setInitialPoint(const num_t &)
Definition: polynomial.hpp:173
Numeric time_t
Definition: polynomial.hpp:34
time_t t_min
Definition: abstract-curve.hpp:64
Polynomial(const t_point_t &coefficients, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:64
Eigen::Ref< coeff_t > coeff_t_ref
Definition: polynomial.hpp:39
Numeric num_t
Definition: polynomial.hpp:35
coeff_t coefficients_
Definition: polynomial.hpp:176
unsigned int fact(const unsigned int n)
Computes factorial of a number.
Definition: bernstein.h:24
AbstractCurve< Numeric, Point > curve_abc_t
Definition: polynomial.hpp:37
std::size_t dim_
Definition: polynomial.hpp:177
Represents a Polynomialf arbitrary order defined on the interval [tBegin, tEnd]. It follows the equat...
Definition: polynomial.hpp:32
Point point_t
Definition: polynomial.hpp:33
double Numeric
Definition: effector_spline.h:26
virtual const std::size_t & size() const
Definition: polynomial.hpp:170
Numeric time_t
Definition: abstract-curve.hpp:23
Polynomial(const coeff_t &coefficients, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:49
virtual bool setInitialPoint(const point_t &)
Definition: polynomial.hpp:172
Numeric num_t
Definition: abstract-curve.hpp:24
Polynomial(In zeroOrderCoefficient, In out, const time_t tmin, const time_t tmax)
Constructor.
Definition: polynomial.hpp:83
Represents a curve of dimension Dim is Safe is false, no verification is made on the evaluation of th...
Definition: abstract-curve.hpp:21
Eigen::Matrix< double, Dim, Eigen::Dynamic > coeff_t
Definition: polynomial.hpp:38
Definition: abstract-curve.hpp:16
friend class boost::serialization::access
Definition: polynomial.hpp:182
void load(Archive &ar, Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > &m, const unsigned int)
Definition: eigen-matrix.hpp:50
~Polynomial()
Destructor.
Definition: polynomial.hpp:93
Polynomial(const Polynomial &other)
Definition: polynomial.hpp:97
std::size_t order_
Definition: polynomial.hpp:178
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
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
std::vector< Point, Eigen::aligned_allocator< Point > > t_point_t
Definition: polynomial.hpp:36
void save(Archive &ar, const Eigen::Matrix< _Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols > &m, const unsigned int)
Definition: eigen-matrix.hpp:38
virtual const time_t tmax() const
Definition: abstract-curve.hpp:48
Polynomial()
Definition: polynomial.hpp:73
Eigen::Matrix< Numeric, 3, 1 > Point
Definition: effector_spline.h:28