13 #ifndef eli_geom_curve_piecewise_spline_creator_hpp
14 #define eli_geom_curve_piecewise_spline_creator_hpp
19 #include "eli/code_eli.hpp"
34 template<
typename data__,
unsigned short dim__,
typename tol__>
51 point_type &cp2, point_type &cp3,
const index_type &i)
const
63 const point_type &cp2,
const point_type &cp3,
const index_type &i)
75 const point_type &p1,
const point_type &m1,
const index_type &i)
93 typedef typename piecewise_curve_type::curve_type curve_type;
94 typedef typename piecewise_curve_type::error_code error_code;
113 for (index_type i=0; i<nsegs; ++i)
120 if (err!=piecewise_curve_type::NO_ERRORS)
140 template<
typename po
int_it__>
158 point_it__ it, itm1, itp1, ite;
159 data_type tmp[3], t[3],
dt;
175 std::advance(ite, npts);
208 for (j=0; j<dim__; ++j)
221 point_it__ item1(ite);
230 for (j=0; j<dim__; ++j)
251 for (j=0; j<dim__; ++j)
270 ++itm1; ++it; ++itp1;
271 for (i=1; i<npts-2; ++i, ++itm1, ++it, ++itp1)
277 for (j=0; j<dim__; ++j)
305 for (j=0; j<dim__; ++j)
326 for (j=0; j<dim__; ++j)
342 for (j=0; j<dim__; ++j)
360 for (j=0; j<dim__; ++j)
389 template<
typename po
int_it__>
414 point_it__ it, itm1, itp1, ite;
430 std::advance(ite, npts);
465 point_it__ item1(ite);
493 ++itm1; ++it; ++itp1;
494 for (i=1; i<npts-2; ++i, ++itm1, ++it, ++itp1)
563 template<
typename po
int_it__>
578 template<
typename po
int_it__>
598 if ( (tension<-1) || (tension>1) )
603 if ( (bias<-1) || (bias>1) )
608 if ( (continuity<-1) || (continuity>1) )
614 point_it__ it, itm1, itp1, itp2, ite;
630 std::advance(ite, npts);
667 point_it__ item1(ite);
671 m[0]=
static_cast<data_type
>(0.5)*(1-tension)*(1+bias)*(1+
continuity)*((*itm1)-(*item1))/this->
get_segment_dt(nsegs-1)
696 for (i=1; i<npts-2; ++i, ++itm1, ++it, ++itp1, ++itp2)
700 +
static_cast<data_type
>(0.5)*(1-tension)*(1-bias)*(1-
continuity)*((*itp1)-(*it))/dt;
701 m[1]=
static_cast<data_type
>(0.5)*(1-tension)*(1+bias)*(1-
continuity)*((*itp1)-(*it))/dt
772 template<
typename po
int_it__>
776 Eigen::Matrix<data_type, Eigen::Dynamic, Eigen::Dynamic> M(nunk, nunk);
777 Eigen::Matrix<data_type, Eigen::Dynamic, dim__> b(nunk, dim__);
790 data_type dt1_3, dt2_3;
798 M(1, 3)=1/dt1_3+1/dt2_3;
807 M(nunk-2, nunk-7)=-1/dt1_3;
808 M(nunk-2, nunk-6)=3/dt1_3;
809 M(nunk-2, nunk-5)=-3/dt1_3;
810 M(nunk-2, nunk-4)=1/dt1_3+1/dt2_3;
811 M(nunk-2, nunk-3)=-3/dt2_3;
812 M(nunk-2, nunk-2)=3/dt2_3;
813 M(nunk-2, nunk-1)=-1/dt2_3;
814 b.row(nunk-2).setZero();
818 for (i=0; i<nunk; ++i)
830 template<
typename po
int_it__>
834 Eigen::Matrix<data_type, Eigen::Dynamic, Eigen::Dynamic> M(nunk, nunk);
835 Eigen::Matrix<data_type, Eigen::Dynamic, dim__> b(nunk, dim__);
845 b.row(1)=start_slope;
847 M(nunk-2, nunk-2)=-3/tmp;
848 M(nunk-2, nunk-1)=3/tmp;
849 b.row(nunk-2)=end_slope;
853 for (i=0; i<nunk; ++i)
865 template<
typename po
int_it__>
869 Eigen::Matrix<data_type, Eigen::Dynamic, Eigen::Dynamic> M(nunk, nunk);
870 Eigen::Matrix<data_type, Eigen::Dynamic, dim__> b(nunk, dim__);
881 M(nunk-2, nunk-2)=-2;
883 b.row(nunk-2).setZero();
887 for (i=0; i<nunk; ++i)
899 template<
typename po
int_it__>
903 std::vector<point_type, Eigen::aligned_allocator<point_type>> pt(nseg+1);
907 for (i=0, it=itb; i<nseg; ++i, ++it)
922 template<
typename po
int_it__>
926 Eigen::Matrix<data_type, Eigen::Dynamic, Eigen::Dynamic> M(nunk, nunk);
927 Eigen::Matrix<data_type, Eigen::Dynamic, dim__> b(nunk, dim__);
939 M(nunk-2, 0)=1/dt0/dt0;
940 M(nunk-2, 1)=-2/dt0/dt0;
941 M(nunk-2, 2)=1/dt0/dt0;
942 M(nunk-2, nunk-3)=-1/dtn/dtn;
943 M(nunk-2, nunk-2)=2/dtn/dtn;
944 M(nunk-2, nunk-1)=-1/dtn/dtn;
945 b.row(nunk-2).setZero();
949 for (i=0; i<nunk; ++i)
960 template<
typename Derived1__,
typename Derived2__,
typename po
int_it__>
972 for (++it, i=1; i<nseg; ++i, ++it)
977 M(3*i-1, 3*i-2)=1/dtm1/dtm1;
978 M(3*i-1, 3*i-1)=-2/dtm1/dtm1;
979 M(3*i-1, 3*i)=1/dtm1/dtm1-1/
dt/
dt;
980 M(3*i-1, 3*i+1)=2/
dt/
dt;
981 M(3*i-1, 3*i+2)=-1/
dt/
dt;
982 b.row(3*i-1).setZero();
989 M(3*i+1, 3*i-1)=1/dtm1;
990 M(3*i+1, 3*i)=-(1/dtm1+1/
dt);
991 M(3*i+1, 3*i+1)=1/
dt;
992 b.row(3*i+1).setZero();
void set_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:773
void set_segment_point_slope(const point_type &p0, const point_type &m0, const point_type &p1, const point_type &m1, const index_type &i)
Definition: piecewise_cubic_spline_creator.hpp:74
Definition: continuity.hpp:26
data__ data_type
Definition: piecewise_creator_base.hpp:33
Definition: continuity.hpp:28
piecewise_cubic_spline_creator()
Definition: piecewise_cubic_spline_creator.hpp:44
void get_segment_control_points(point_type &cp0, point_type &cp1, point_type &cp2, point_type &cp3, const index_type &i) const
Definition: piecewise_cubic_spline_creator.hpp:50
void set_stencil(const stencil &s)
Definition: d1o2.hpp:70
piecewise_cubic_spline_creator(const index_type &ns)
Definition: piecewise_cubic_spline_creator.hpp:45
void number_segments_changed()
Definition: piecewise_cubic_spline_creator.hpp:958
void set_chip(point_it__ itb, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:141
error_code push_back(const curve_type &curve, const data_type &dt=1.0)
Definition: piecewise.hpp:688
base_class_type::data_type data_type
Definition: piecewise_cubic_spline_creator.hpp:39
void set_cardinal(point_it__ itb, const data__ &c, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:390
point_collection_type control_point
Definition: piecewise_cubic_spline_creator.hpp:1000
void set_segment_control_points(const point_type &cp0, const point_type &cp1, const point_type &cp2, const point_type &cp3, const index_type &i)
Definition: piecewise_cubic_spline_creator.hpp:62
Definition: piecewise.hpp:244
Eigen::Matrix< data_type, 1, dim__ > point_type
Definition: piecewise_creator_base.hpp:34
std::vector< point_type, Eigen::aligned_allocator< point_type > > point_collection_type
Definition: piecewise_cubic_spline_creator.hpp:956
Definition: continuity.hpp:27
index_type get_number_segments() const
Definition: piecewise_creator_base.hpp:47
void set_kochanek_bartels(point_it__ itb, const data__ &tension, const data__ &bias, const data__ &continuity, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:579
Definition: continuity.hpp:33
Definition: piecewise_cubic_spline_creator.hpp:35
piecewise_creator_base< data__, dim__, tol__ > base_class_type
Definition: piecewise_cubic_spline_creator.hpp:38
base_class_type::point_type point_type
Definition: piecewise_cubic_spline_creator.hpp:40
virtual bool create(piecewise< bezier, data_type, dim__, tolerance_type > &pc) const
Definition: piecewise_cubic_spline_creator.hpp:90
void set_catmull_rom(point_it__ itb, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:564
data_type get_segment_dt(const index_type &i) const
Definition: piecewise_creator_base.hpp:78
void clear()
Definition: piecewise.hpp:599
int evaluate(data__ &d, itphi__ itphi, const data__ &dx) const
Definition: d1o2.hpp:131
base_class_type::tolerance_type tolerance_type
Definition: piecewise_cubic_spline_creator.hpp:42
base_class_type::index_type index_type
Definition: piecewise_cubic_spline_creator.hpp:41
tol__ tolerance_type
Definition: piecewise_creator_base.hpp:36
void set_natural_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:866
void create_cubic_spline_base_matrix(Eigen::MatrixBase< Derived1__ > &M, Eigen::MatrixBase< Derived2__ > &b, point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:961
continuity
Definition: continuity.hpp:24
void set_t0(const data_type &t0_in)
Definition: piecewise.hpp:340
data_type get_t0() const
Definition: piecewise_creator_base.hpp:62
point_type::Index index_type
Definition: piecewise_creator_base.hpp:35
std::vector< data_type > dt
Definition: piecewise_creator_base.hpp:97
void set_closed_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:900
Definition: piecewise_creator_base.hpp:30
void set_periodic_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:923
void set_clamped_cubic_spline(point_it__ itb, const point_type &start_slope, const point_type &end_slope)
Definition: piecewise_cubic_spline_creator.hpp:831
piecewise_cubic_spline_creator(const piecewise_cubic_spline_creator< data_type, dim__, tolerance_type > &pcc)
Definition: piecewise_cubic_spline_creator.hpp:47