50class SplineBezierPath:
public Spline<ScalarType, DataType>
54 typedef DataTraits TDataTraits;
56 typedef typename TSplineBase::TScalar TScalar;
57 typedef typename TSplineBase::TData TData;
58 typedef typename TSplineBase::ControlRange TControlRange;
63 DataTriplet(
const TData& left,
const TData& knot,
const TData& right):
64 left_(left), knot_(knot), right_(right) {}
65 const TData& left()
const {
return left_; }
66 const TData& knot()
const {
return knot_; }
67 const TData& right()
const {
return right_; }
69 friend class SplineBezierPath;
76 template <
typename PairInputIterator>
77 SplineBezierPath(PairInputIterator iFirst, PairInputIterator iLast);
78 template <
typename ScalarInputIterator,
typename DataInputIterator>
79 SplineBezierPath(ScalarInputIterator iFirstControl, ScalarInputIterator iLastControl,
80 DataInputIterator iFirstData);
82 const TData operator()(TScalar iX)
const override;
83 const TData derivative(TScalar iX)
const override;
85 const TData integral(TScalar iA, TScalar iB)
const override;
97 Node(
const DataTriplet& triplet, TScalar x): triplet(triplet), x(x) {}
98 const TData& left()
const {
return triplet.left(); }
99 const TData& knot()
const {
return triplet.knot(); }
100 const TData& right()
const {
return triplet.right(); }
102 static bool less(
const Node& iA,
const Node& iB) {
return iA.x < iB.x; }
104 typedef std::vector<Node> TNodes;
105 typedef typename TNodes::const_iterator TNodeConstIterator;
107 typedef std::pair<TScalar, TData> TSimpleNode;
108 typedef std::vector<TSimpleNode> TSimpleNodes;
110 template <
typename PairInputIterator>
111 void init(PairInputIterator first, PairInputIterator last,
const DataTriplet& dummy);
112 template <
typename PairInputIterator>
113 void init(PairInputIterator first, PairInputIterator last,
const TData& dummy);
114 template <
typename ScalarInputIterator,
typename DataInputIterator>
115 void init(ScalarInputIterator firstControl, ScalarInputIterator lastControl,
116 DataInputIterator firstData,
const DataTriplet& dummy);
117 template <
typename ScalarInputIterator,
typename DataInputIterator>
118 void init(ScalarInputIterator firstControl, ScalarInputIterator lastControl,
119 DataInputIterator firstData,
const TData& dummy);
120 void makeFullNodes(
const TSimpleNodes& simpleNodes);
123 const TNodeConstIterator findNode(TScalar iX)
const;
126 size_t dataDimension_;
const SplineLinear< S, D, T >::TData SplineLinear< S, D, T >::derivative2(TScalar) const
Get the second derivative of data value that corresponds with constrol value iX.