11 #ifndef _STRUCT_CURVE_ABC 12 #define _STRUCT_CURVE_ABC 15 #include "serialization/archive.hpp" 16 #include "serialization/eigen-matrix.hpp" 17 #include "serialization/registeration.hpp" 18 #include <boost/serialization/shared_ptr.hpp> 19 #include <boost/smart_ptr/shared_ptr.hpp> 25 bool isApprox(
const T a,
const T b,
const T eps = 1e-6) {
26 return fabs(a - b) < eps;
32 template <
typename Time = double,
typename Numeric =
Time,
bool Safe =
false,
33 typename Point = Eigen::Matrix<Numeric, Eigen::Dynamic, 1>,
typename Point_derivate =
Point>
34 struct curve_abc : std::unary_function<Time, Point>,
public serialization::Serializable {
56 virtual point_t
operator()(
const time_t t)
const = 0;
67 virtual point_derivate_t
derivate(
const time_t t,
const std::size_t order)
const = 0;
77 bool isEquivalent(
const curve_t* other,
const Numeric prec = Eigen::NumTraits<Numeric>::dummy_precision(),
78 const size_t order = 5)
const {
79 bool equal = ndcurves::isApprox<num_t>(
min(), other->
min()) && ndcurves::isApprox<num_t>(
max(), other->
max()) &&
84 time_t inc = (
max() -
min()) / 10.;
88 if (!(*
this)(t).
isApprox(other->operator()(t), prec)) {
94 for (
size_t n = 1; n <= order; ++n) {
114 virtual bool isApprox(
const curve_t* other,
115 const Numeric prec = Eigen::NumTraits<Numeric>::dummy_precision())
const = 0;
122 virtual std::size_t
dim()
const = 0;
125 virtual time_t
min()
const = 0;
128 virtual time_t
max()
const = 0;
131 virtual std::size_t
degree()
const = 0;
137 friend class boost::serialization::access;
138 template <
class Archive>
139 void serialize(Archive& ar,
const unsigned int version) {
140 serialization::register_types<Archive>(ar, version);
146 BOOST_SERIALIZATION_ASSUME_ABSTRACT(
curve_abc)
149 DEFINE_CLASS_TEMPLATE_VERSION(SINGLE_ARG(
typename Time,
typename Numeric,
bool Safe,
typename Point,
typename Point_derivate),
151 #endif //_STRUCT_CURVE_ABC Definition: bernstein.h:20
Point point_t
Definition: curve_abc.h:35
virtual point_t operator()(const time_t t) const =0
Evaluation of the cubic spline at time t.
curve_abc< Time, Numeric, Safe, point_derivate_t > curve_derivate_t
Definition: curve_abc.h:40
virtual time_t max() const =0
Get the maximum time for which the curve is defined.
Numeric num_t
Definition: curve_abc.h:38
std::pair< time_t, time_t > timeRange()
Definition: curve_abc.h:133
virtual point_derivate_t derivate(const time_t t, const std::size_t order) const =0
Evaluate the derivative of order N of curve at time t.
boost::shared_ptr< curve_t > curve_ptr_t
Definition: curve_abc.h:41
virtual curve_derivate_t * compute_derivate_ptr(const std::size_t order) const =0
Compute the derived curve at order N.
void serialize(Archive &ar, const unsigned int version)
Definition: curve_abc.h:139
virtual std::size_t degree() const =0
Get the degree of the curve.
double Time
Definition: effector_spline.h:27
virtual bool isApprox(const curve_t *other, const Numeric prec=Eigen::NumTraits< Numeric >::dummy_precision()) const =0
isApprox check if other and *this are approximately equal given a precision treshold Only two curves ...
virtual time_t min() const =0
Get the minimum time for which the curve is defined.
curve_abc< Time, Numeric, Safe, point_t, point_derivate_t > curve_t
Definition: curve_abc.h:39
bool isApprox(const T a, const T b, const T eps=1e-6)
Definition: curve_abc.h:25
virtual std::size_t dim() const =0
Get dimension of curve.
Eigen::Matrix< Numeric, Eigen::Dynamic, 1 > Point
Definition: effector_spline.h:28
Point_derivate point_derivate_t
Definition: curve_abc.h:36
virtual ~curve_abc()
Destructor.
Definition: curve_abc.h:49
double Numeric
Definition: effector_spline.h:26
bool isEquivalent(const curve_t *other, const Numeric prec=Eigen::NumTraits< Numeric >::dummy_precision(), const size_t order=5) const
isEquivalent check if other and *this are approximately equal by values, given a precision treshold...
Definition: curve_abc.h:77
Time time_t
Definition: curve_abc.h:37
curve_abc()
Constructor.
Definition: curve_abc.h:46
Represents a curve of dimension Dim. If value of parameter Safe is false, no verification is made on ...
Definition: curve_abc.h:34