13 #ifndef piecewise_cubic_spline_creator_test_suite_hpp
14 #define piecewise_cubic_spline_creator_test_suite_hpp
28 template<
typename data__>
113 index_type i, pp, ns;
114 data_type tmin, tmax;
120 std::cout <<
"figure(" << figno <<
");" << std::endl;
123 std::cout <<
"cp_x=[";
124 for (pp=0; pp<ns; ++pp)
128 for (i=0; i<=bez.degree(); ++i)
130 std::cout << bez.get_control_point(i).x();
136 std::cout << std::endl;
138 std::cout <<
"];" << std::endl;
140 std::cout <<
"cp_y=[";
141 for (pp=0; pp<ns; ++pp)
145 for (i=0; i<=bez.degree(); ++i)
147 std::cout << bez.get_control_point(i).y();
153 std::cout << std::endl;
155 std::cout <<
"];" << std::endl;
157 std::cout <<
"cp_z=[";
158 for (pp=0; pp<ns; ++pp)
162 for (i=0; i<=bez.degree(); ++i)
164 std::cout << bez.get_control_point(i).z();
170 std::cout << std::endl;
172 std::cout <<
"];" << std::endl;
175 std::vector<data__> t(129);
176 for (i=0; i<static_cast<index_type>(t.size()); ++i)
178 t[i]=tmin+(tmax-tmin)*static_cast<data__>(i)/(t.size()-1);
182 std::cout <<
"surf_x=[";
183 for (i=0; i<static_cast<index_type>(t.size()); ++i)
185 std::cout << pc.
f(t[i]).x();
186 if (i<static_cast<index_type>(t.size()-1))
189 std::cout <<
"];" << std::endl;
191 std::cout <<
"surf_y=[";
192 for (i=0; i<static_cast<index_type>(t.size()); ++i)
194 std::cout << pc.
f(t[i]).y();
195 if (i<static_cast<index_type>(t.size()-1))
198 std::cout <<
"];" << std::endl;
200 std::cout <<
"surf_z=[";
201 for (i=0; i<static_cast<index_type>(t.size()); ++i)
203 std::cout << pc.
f(t[i]).z();
204 if (i<static_cast<index_type>(t.size()-1))
207 std::cout <<
"];" << std::endl;
209 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
210 std::cout <<
"plot3(surf_x, surf_y, surf_z, '-k');" << std::endl;
211 std::cout <<
"hold on;" << std::endl;
212 std::cout <<
"plot3(cp_x', cp_y', cp_z', '-ok', 'MarkerFaceColor', [0 0 0]);" << std::endl;
213 std::cout <<
"hold off;" << std::endl;
220 piecewise_curve_type pc;
221 cubic_spline_creator_type spline_creator(4);
222 std::vector<point_type, Eigen::aligned_allocator<point_type> > pt(16);
224 std::vector<data_type> t(5);
239 pt[10] << -2*k, -1, 0;
242 pt[13] << 2*k, -1, 0;
258 spline_creator.
set_t0(t[0]);
266 TEST_ASSERT(cp[0]==pt[0]);
267 TEST_ASSERT(cp[1]==pt[1]);
268 TEST_ASSERT(cp[2]==pt[2]);
269 TEST_ASSERT(cp[3]==pt[3]);
271 TEST_ASSERT(cp[0]==pt[4]);
272 TEST_ASSERT(cp[1]==pt[5]);
273 TEST_ASSERT(cp[2]==pt[6]);
274 TEST_ASSERT(cp[3]==pt[7]);
276 TEST_ASSERT(cp[0]==pt[8]);
277 TEST_ASSERT(cp[1]==pt[9]);
278 TEST_ASSERT(cp[2]==pt[10]);
279 TEST_ASSERT(cp[3]==pt[11]);
281 TEST_ASSERT(cp[0]==pt[12]);
282 TEST_ASSERT(cp[1]==pt[13]);
283 TEST_ASSERT(cp[2]==pt[14]);
284 TEST_ASSERT(cp[3]==pt[15]);
287 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
289 TEST_ASSERT(dt==t[1]-t[0]);
291 TEST_ASSERT(dt==t[2]-t[1]);
293 TEST_ASSERT(dt==t[3]-t[2]);
295 TEST_ASSERT(dt==t[4]-t[3]);
298 TEST_ASSERT(spline_creator.
create(pc));
303 piecewise_curve_type pc;
304 cubic_spline_creator_type spline_creator(4);
305 std::vector<point_type, Eigen::aligned_allocator<point_type> > pt(16);
321 pt[10] << -2*k, -1, 0;
324 pt[13] << 2*k, -1, 0;
336 TEST_ASSERT(cp[0]==pt[0]);
337 TEST_ASSERT(cp[1]==pt[1]);
338 TEST_ASSERT(cp[2]==pt[2]);
339 TEST_ASSERT(cp[3]==pt[3]);
341 TEST_ASSERT(cp[0]==pt[4]);
342 TEST_ASSERT(cp[1]==pt[5]);
343 TEST_ASSERT(cp[2]==pt[6]);
344 TEST_ASSERT(cp[3]==pt[7]);
346 TEST_ASSERT(cp[0]==pt[8]);
347 TEST_ASSERT(cp[1]==pt[9]);
348 TEST_ASSERT(cp[2]==pt[10]);
349 TEST_ASSERT(cp[3]==pt[11]);
351 TEST_ASSERT(cp[0]==pt[12]);
352 TEST_ASSERT(cp[1]==pt[13]);
353 TEST_ASSERT(cp[2]==pt[14]);
354 TEST_ASSERT(cp[3]==pt[15]);
357 TEST_ASSERT(spline_creator.
get_t0()==0);
368 TEST_ASSERT(spline_creator.
create(pc));
376 piecewise_curve_type pc;
377 cubic_spline_creator_type spline_creator(4);
378 point_type pt_b, pt_a;
379 std::vector<point_type, Eigen::aligned_allocator<point_type> > pt(5), m0(4), m1(4);
380 std::vector<data_type> t(5);
405 spline_creator.
set_t0(t[0]);
418 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
420 TEST_ASSERT(dt==t[1]-t[0]);
422 TEST_ASSERT(dt==t[2]-t[1]);
424 TEST_ASSERT(dt==t[3]-t[2]);
426 TEST_ASSERT(dt==t[4]-t[3]);
429 TEST_ASSERT(spline_creator.
create(pc));
433 TEST_ASSERT(nseg==static_cast<index_type>(pt.size()-1));
436 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
439 data_type small(std::numeric_limits<data_type>::epsilon());
442 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i]));
444 TEST_ASSERT(tol.approximately_equal(pt_b, m0[i]));
445 for (i=1; i<nseg-1; ++i)
447 pt_b=pc.
f(t[i]*(1+small));
448 pt_a=pc.
f(t[i]*(1-small));
449 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i]));
450 TEST_ASSERT(tol.approximately_equal(pt_b, pt[i]));
451 pt_b=pc.
fp(t[i]*(1+small));
452 pt_a=pc.
fp(t[i]*(1-small));
453 TEST_ASSERT(tol.approximately_equal(pt_a, m1[i-1]));
458 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i+1]));
460 TEST_ASSERT(tol.approximately_equal(pt_b, m1[i]));
465 piecewise_curve_type pc;
466 cubic_spline_creator_type spline_creator(4);
467 point_type pt_b, pt_a;
468 std::vector<point_type, Eigen::aligned_allocator<point_type> > pt(5), m0(4), m1(4);
494 TEST_ASSERT(spline_creator.
get_t0()==0);
505 TEST_ASSERT(spline_creator.
create(pc));
509 TEST_ASSERT(nseg==static_cast<index_type>(pt.size()-1));
512 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
515 data_type small(std::numeric_limits<data_type>::epsilon());
517 pt_a=pc.
f(static_cast<data_type>(i));
518 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i]));
519 pt_b=pc.
fp(static_cast<data_type>(i));
520 TEST_ASSERT(tol.approximately_equal(pt_b, m0[i]));
521 for (i=1; i<nseg-1; ++i)
523 pt_b=pc.
f(i*(1+small));
524 pt_a=pc.
f(i*(1-small));
525 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i]));
526 TEST_ASSERT(tol.approximately_equal(pt_b, pt[i]));
527 pt_b=pc.
fp(i*(1+small));
528 pt_a=pc.
fp(i*(1-small));
529 TEST_ASSERT(tol.approximately_equal(pt_a, m1[i-1]));
533 pt_a=pc.
f(static_cast<data_type>(i+1));
534 TEST_ASSERT(tol.approximately_equal(pt_a, pt[i+1]));
535 pt_b=pc.
fp(static_cast<data_type>(i+1));
536 TEST_ASSERT(tol.approximately_equal(pt_b, m1[i]));
544 piecewise_curve_type pc;
545 cubic_spline_creator_type spline_creator(4);
546 point_type pt_b, pt_a;
547 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
548 std::vector<data_type> t(5);
566 spline_creator.
set_t0(t[0]);
574 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
576 TEST_ASSERT(dt==t[1]-t[0]);
578 TEST_ASSERT(dt==t[2]-t[1]);
580 TEST_ASSERT(dt==t[3]-t[2]);
582 TEST_ASSERT(dt==t[4]-t[3]);
585 TEST_ASSERT(spline_creator.
create(pc));
589 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
592 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
595 for (i=1; i<nseg; ++i)
604 piecewise_curve_type pc;
605 cubic_spline_creator_type spline_creator(4);
606 point_type pt_b, pt_a;
607 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
622 TEST_ASSERT(spline_creator.
get_t0()==0);
633 TEST_ASSERT(spline_creator.
create(pc));
637 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
640 for (i=1; i<nseg; ++i)
642 cont=pc.
continuity(static_cast<data_type>(i));
652 piecewise_curve_type pc;
653 cubic_spline_creator_type spline_creator(5);
654 point_type pt_b, pt_a;
655 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
656 std::vector<data_type> t(6);
675 spline_creator.
set_t0(t[0]);
684 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
686 TEST_ASSERT(dt==t[1]-t[0]);
688 TEST_ASSERT(dt==t[2]-t[1]);
690 TEST_ASSERT(dt==t[3]-t[2]);
692 TEST_ASSERT(dt==t[4]-t[3]);
694 TEST_ASSERT(dt==t[5]-t[4]);
697 TEST_ASSERT(spline_creator.
create(pc));
701 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
704 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
710 for (i=1; i<(nseg-1); ++i)
725 piecewise_curve_type pc;
726 cubic_spline_creator_type spline_creator(5);
727 point_type pt_b, pt_a;
728 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
729 std::vector<data_type> t(6);
748 spline_creator.
set_t0(t[0]);
757 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
759 TEST_ASSERT(dt==t[1]-t[0]);
761 TEST_ASSERT(dt==t[2]-t[1]);
763 TEST_ASSERT(dt==t[3]-t[2]);
765 TEST_ASSERT(dt==t[4]-t[3]);
768 TEST_ASSERT(spline_creator.
create(pc));
772 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
775 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
781 for (i=1; i<(nseg-1); ++i)
796 piecewise_curve_type pc;
797 cubic_spline_creator_type spline_creator(5);
798 point_type pt_b, pt_a;
799 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
800 std::vector<data_type> t(6);
816 TEST_ASSERT(spline_creator.
get_t0()==0);
829 TEST_ASSERT(spline_creator.
create(pc));
833 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
836 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
842 for (i=1; i<(nseg-1); ++i)
844 cont=pc.
continuity(static_cast<data_type>(i));
851 cont=pc.
continuity(static_cast<data_type>(nseg));
857 piecewise_curve_type pc;
858 cubic_spline_creator_type spline_creator(5);
859 point_type pt_b, pt_a;
860 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
861 std::vector<data_type> t(6);
877 TEST_ASSERT(spline_creator.
get_t0()==0);
890 TEST_ASSERT(spline_creator.
create(pc));
894 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
897 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
903 for (i=1; i<(nseg-1); ++i)
905 cont=pc.
continuity(static_cast<data_type>(i));
912 cont=pc.
continuity(static_cast<data_type>(nseg));
921 piecewise_curve_type pc;
922 cubic_spline_creator_type spline_creator(4);
923 point_type pt_b, pt_a;
924 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
925 std::vector<data_type> t(5);
943 spline_creator.
set_t0(t[0]);
951 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
953 TEST_ASSERT(dt==t[1]-t[0]);
955 TEST_ASSERT(dt==t[2]-t[1]);
957 TEST_ASSERT(dt==t[3]-t[2]);
959 TEST_ASSERT(dt==t[4]-t[3]);
962 TEST_ASSERT(spline_creator.
create(pc));
966 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
969 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
972 for (i=1; i<nseg; ++i)
981 piecewise_curve_type pc;
982 cubic_spline_creator_type spline_creator(4);
983 point_type pt_b, pt_a;
984 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
999 TEST_ASSERT(spline_creator.
get_t0()==0);
1010 TEST_ASSERT(spline_creator.
create(pc));
1014 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
1017 for (i=1; i<nseg; ++i)
1019 cont=pc.
continuity(static_cast<data_type>(i));
1029 piecewise_curve_type pc;
1030 cubic_spline_creator_type spline_creator(5);
1031 point_type pt_b, pt_a;
1032 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1033 std::vector<data_type> t(6);
1052 spline_creator.
set_t0(t[0]);
1061 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1063 TEST_ASSERT(dt==t[1]-t[0]);
1065 TEST_ASSERT(dt==t[2]-t[1]);
1067 TEST_ASSERT(dt==t[3]-t[2]);
1069 TEST_ASSERT(dt==t[4]-t[3]);
1071 TEST_ASSERT(dt==t[5]-t[4]);
1074 TEST_ASSERT(spline_creator.
create(pc));
1078 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1081 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1084 TEST_ASSERT(pc.
closed());
1087 for (i=1; i<(nseg-1); ++i)
1102 piecewise_curve_type pc;
1103 cubic_spline_creator_type spline_creator(5);
1104 point_type pt_b, pt_a;
1105 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1106 std::vector<data_type> t(6);
1125 spline_creator.
set_t0(t[0]);
1134 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1136 TEST_ASSERT(dt==t[1]-t[0]);
1138 TEST_ASSERT(dt==t[2]-t[1]);
1140 TEST_ASSERT(dt==t[3]-t[2]);
1142 TEST_ASSERT(dt==t[4]-t[3]);
1145 TEST_ASSERT(spline_creator.
create(pc));
1149 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1152 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1155 TEST_ASSERT(pc.
closed());
1158 for (i=1; i<(nseg-1); ++i)
1173 piecewise_curve_type pc;
1174 cubic_spline_creator_type spline_creator(5);
1175 point_type pt_b, pt_a;
1176 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1177 std::vector<data_type> t(6);
1193 TEST_ASSERT(spline_creator.
get_t0()==0);
1206 TEST_ASSERT(spline_creator.
create(pc));
1210 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1213 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
1216 TEST_ASSERT(pc.
closed());
1219 for (i=1; i<(nseg-1); ++i)
1221 cont=pc.
continuity(static_cast<data_type>(i));
1228 cont=pc.
continuity(static_cast<data_type>(nseg));
1234 piecewise_curve_type pc;
1235 cubic_spline_creator_type spline_creator(5);
1236 point_type pt_b, pt_a;
1237 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1238 std::vector<data_type> t(6);
1254 TEST_ASSERT(spline_creator.
get_t0()==0);
1267 TEST_ASSERT(spline_creator.
create(pc));
1271 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1274 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
1277 TEST_ASSERT(pc.
closed());
1280 for (i=1; i<(nseg-1); ++i)
1282 cont=pc.
continuity(static_cast<data_type>(i));
1289 cont=pc.
continuity(static_cast<data_type>(nseg));
1298 piecewise_curve_type pc;
1299 cubic_spline_creator_type spline_creator(4);
1300 point_type pt_b, pt_a;
1301 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1302 std::vector<data_type> t(5);
1320 spline_creator.
set_t0(t[0]);
1328 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1330 TEST_ASSERT(dt==t[1]-t[0]);
1332 TEST_ASSERT(dt==t[2]-t[1]);
1334 TEST_ASSERT(dt==t[3]-t[2]);
1336 TEST_ASSERT(dt==t[4]-t[3]);
1339 TEST_ASSERT(spline_creator.
create(pc));
1343 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
1346 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1349 for (i=1; i<nseg; ++i)
1358 piecewise_curve_type pc;
1359 cubic_spline_creator_type spline_creator(4);
1360 point_type pt_b, pt_a;
1361 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1376 TEST_ASSERT(spline_creator.
get_t0()==0);
1387 TEST_ASSERT(spline_creator.
create(pc));
1391 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
1394 for (i=1; i<nseg; ++i)
1396 cont=pc.
continuity(static_cast<data_type>(i));
1406 piecewise_curve_type pc;
1407 cubic_spline_creator_type spline_creator(5);
1408 point_type pt_b, pt_a;
1409 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1410 std::vector<data_type> t(6);
1429 spline_creator.
set_t0(t[0]);
1438 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1440 TEST_ASSERT(dt==t[1]-t[0]);
1442 TEST_ASSERT(dt==t[2]-t[1]);
1444 TEST_ASSERT(dt==t[3]-t[2]);
1446 TEST_ASSERT(dt==t[4]-t[3]);
1448 TEST_ASSERT(dt==t[5]-t[4]);
1451 TEST_ASSERT(spline_creator.
create(pc));
1455 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1458 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1461 TEST_ASSERT(pc.
closed());
1464 for (i=1; i<(nseg-1); ++i)
1479 piecewise_curve_type pc;
1480 cubic_spline_creator_type spline_creator(5);
1481 point_type pt_b, pt_a;
1482 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1483 std::vector<data_type> t(6);
1502 spline_creator.
set_t0(t[0]);
1511 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1513 TEST_ASSERT(dt==t[1]-t[0]);
1515 TEST_ASSERT(dt==t[2]-t[1]);
1517 TEST_ASSERT(dt==t[3]-t[2]);
1519 TEST_ASSERT(dt==t[4]-t[3]);
1522 TEST_ASSERT(spline_creator.
create(pc));
1526 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1529 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1532 TEST_ASSERT(pc.
closed());
1535 for (i=1; i<(nseg-1); ++i)
1549 piecewise_curve_type pc;
1550 cubic_spline_creator_type spline_creator(5);
1551 point_type pt_b, pt_a;
1552 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1553 std::vector<data_type> t(6);
1569 TEST_ASSERT(spline_creator.
get_t0()==0);
1582 TEST_ASSERT(spline_creator.
create(pc));
1586 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1589 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
1592 TEST_ASSERT(pc.
closed());
1595 for (i=1; i<(nseg-1); ++i)
1597 cont=pc.
continuity(static_cast<data_type>(i));
1604 cont=pc.
continuity(static_cast<data_type>(nseg));
1610 piecewise_curve_type pc;
1611 cubic_spline_creator_type spline_creator(5);
1612 point_type pt_b, pt_a;
1613 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1614 std::vector<data_type> t(6);
1630 TEST_ASSERT(spline_creator.
get_t0()==0);
1643 TEST_ASSERT(spline_creator.
create(pc));
1647 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
1650 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
1653 TEST_ASSERT(pc.
closed());
1656 for (i=1; i<(nseg-1); ++i)
1658 cont=pc.
continuity(static_cast<data_type>(i));
1665 cont=pc.
continuity(static_cast<data_type>(nseg));
1673 piecewise_curve_type pc;
1674 cubic_spline_creator_type spline_creator(4);
1675 point_type pt_b, pt_a;
1676 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1677 std::vector<data_type> t(5);
1678 data_type dt, ten(0.75), bia(0.75), con(0);
1695 spline_creator.
set_t0(t[0]);
1703 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1705 TEST_ASSERT(dt==t[1]-t[0]);
1707 TEST_ASSERT(dt==t[2]-t[1]);
1709 TEST_ASSERT(dt==t[3]-t[2]);
1711 TEST_ASSERT(dt==t[4]-t[3]);
1714 TEST_ASSERT(spline_creator.
create(pc));
1718 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
1721 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1724 for (i=1; i<nseg; ++i)
1733 piecewise_curve_type pc;
1734 cubic_spline_creator_type spline_creator(4);
1735 point_type pt_b, pt_a;
1736 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1737 data_type dt, ten(0.75), bia(0.75), con(0);
1751 TEST_ASSERT(spline_creator.
get_t0()==0);
1762 TEST_ASSERT(spline_creator.
create(pc));
1766 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
1769 for (i=1; i<nseg; ++i)
1771 cont=pc.
continuity(static_cast<data_type>(i));
1781 piecewise_curve_type pc;
1782 cubic_spline_creator_type spline_creator(5);
1783 point_type pt_b, pt_a;
1784 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1785 std::vector<data_type> t(6);
1786 data_type dt, ten(0.75), bia(0.75), con(0);
1803 spline_creator.
set_t0(t[0]);
1811 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1813 TEST_ASSERT(dt==t[1]-t[0]);
1815 TEST_ASSERT(dt==t[2]-t[1]);
1817 TEST_ASSERT(dt==t[3]-t[2]);
1819 TEST_ASSERT(dt==t[4]-t[3]);
1821 TEST_ASSERT(dt==t[5]-t[4]);
1824 TEST_ASSERT(spline_creator.
create(pc));
1828 TEST_ASSERT(nseg==(static_cast<index_type>(pts.size())));
1831 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1834 TEST_ASSERT(pc.
closed());
1837 for (i=1; i<(nseg-1); ++i)
1852 piecewise_curve_type pc;
1853 cubic_spline_creator_type spline_creator(5);
1854 point_type pt_b, pt_a;
1855 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1856 std::vector<data_type> t(6);
1857 data_type dt, ten(0.75), bia(0.75), con(0);
1874 spline_creator.
set_t0(t[0]);
1882 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
1884 TEST_ASSERT(dt==t[1]-t[0]);
1886 TEST_ASSERT(dt==t[2]-t[1]);
1888 TEST_ASSERT(dt==t[3]-t[2]);
1890 TEST_ASSERT(dt==t[4]-t[3]);
1892 TEST_ASSERT(dt==t[5]-t[4]);
1895 TEST_ASSERT(spline_creator.
create(pc));
1899 TEST_ASSERT(nseg==(static_cast<index_type>(pts.size())));
1902 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
1905 TEST_ASSERT(pc.
closed());
1908 for (i=1; i<(nseg-1); ++i)
1923 piecewise_curve_type pc;
1924 cubic_spline_creator_type spline_creator(5);
1925 point_type pt_b, pt_a;
1926 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1927 data_type dt, ten(0.75), bia(0.75), con(0);
1941 TEST_ASSERT(spline_creator.
get_t0()==0);
1954 TEST_ASSERT(spline_creator.
create(pc));
1958 TEST_ASSERT(nseg==(static_cast<index_type>(pts.size())));
1961 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
1964 TEST_ASSERT(pc.
closed());
1967 for (i=1; i<(nseg-1); ++i)
1969 cont=pc.
continuity(static_cast<data_type>(i));
1982 piecewise_curve_type pc;
1983 cubic_spline_creator_type spline_creator(5);
1984 point_type pt_b, pt_a;
1985 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
1986 data_type dt, ten(0.75), bia(0.75), con(0);
2000 TEST_ASSERT(spline_creator.
get_t0()==0);
2013 TEST_ASSERT(spline_creator.
create(pc));
2017 TEST_ASSERT(nseg==(static_cast<index_type>(pts.size())));
2020 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2023 TEST_ASSERT(pc.
closed());
2026 for (i=1; i<(nseg-1); ++i)
2028 cont=pc.
continuity(static_cast<data_type>(i));
2044 piecewise_curve_type pc;
2045 cubic_spline_creator_type spline_creator(4);
2046 point_type pt_b, pt_a;
2047 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2048 std::vector<data_type> t(5);
2066 spline_creator.
set_t0(t[0]);
2074 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
2076 TEST_ASSERT(dt==t[1]-t[0]);
2078 TEST_ASSERT(dt==t[2]-t[1]);
2080 TEST_ASSERT(dt==t[3]-t[2]);
2082 TEST_ASSERT(dt==t[4]-t[3]);
2085 TEST_ASSERT(spline_creator.
create(pc));
2089 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2092 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
2095 for (i=1; i<nseg; ++i)
2098 if ((i==1) || (i==3))
2109 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(t[0])));
2110 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(t[4])));
2115 piecewise_curve_type pc;
2116 cubic_spline_creator_type spline_creator(4);
2117 point_type pt_b, pt_a;
2118 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2134 TEST_ASSERT(spline_creator.
get_t0()==0);
2145 TEST_ASSERT(spline_creator.
create(pc));
2149 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2152 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2155 for (i=1; i<nseg; ++i)
2157 cont=pc.
continuity(static_cast<data_type>(i));
2158 if ((i==1) || (i==3))
2169 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(0)));
2170 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(4)));
2178 piecewise_curve_type pc;
2179 cubic_spline_creator_type spline_creator(4);
2180 point_type pt_b, pt_a;
2181 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2182 std::vector<data_type> t(5);
2200 spline_creator.
set_t0(t[0]);
2211 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
2213 TEST_ASSERT(dt==t[1]-t[0]);
2215 TEST_ASSERT(dt==t[2]-t[1]);
2217 TEST_ASSERT(dt==t[3]-t[2]);
2219 TEST_ASSERT(dt==t[4]-t[3]);
2222 TEST_ASSERT(spline_creator.
create(pc));
2226 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2229 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
2232 for (i=1; i<nseg; ++i)
2239 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(t[0])));
2240 TEST_ASSERT(tol.approximately_equal(m0, pc.
fp(t[0])));
2241 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(t[4])));
2242 TEST_ASSERT(tol.approximately_equal(m1, pc.
fp(t[4])));
2247 piecewise_curve_type pc;
2248 cubic_spline_creator_type spline_creator(4);
2249 point_type pt_b, pt_a;
2250 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2269 TEST_ASSERT(spline_creator.
get_t0()==0);
2280 TEST_ASSERT(spline_creator.
create(pc));
2284 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2287 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2290 for (i=1; i<nseg; ++i)
2292 cont=pc.
continuity(static_cast<data_type>(i));
2297 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(0)));
2298 TEST_ASSERT(tol.approximately_equal(m0, pc.
fp(0)));
2299 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(4)));
2300 TEST_ASSERT(tol.approximately_equal(m1, pc.
fp(4)));
2308 piecewise_curve_type pc;
2309 cubic_spline_creator_type spline_creator(4);
2310 point_type pt_b, pt_a;
2311 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2312 std::vector<data_type> t(5);
2330 spline_creator.
set_t0(t[0]);
2338 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
2340 TEST_ASSERT(dt==t[1]-t[0]);
2342 TEST_ASSERT(dt==t[2]-t[1]);
2344 TEST_ASSERT(dt==t[3]-t[2]);
2346 TEST_ASSERT(dt==t[4]-t[3]);
2349 TEST_ASSERT(spline_creator.
create(pc));
2353 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2356 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
2359 for (i=1; i<nseg; ++i)
2367 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(t[0])));
2368 TEST_ASSERT(tol.approximately_equal(pt_a, pc.
fpp(t[0])));
2369 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(t[4])));
2370 TEST_ASSERT(tol.approximately_equal(pt_a, pc.
fpp(t[4])));
2375 piecewise_curve_type pc;
2376 cubic_spline_creator_type spline_creator(4);
2377 point_type pt_b, pt_a;
2378 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2394 TEST_ASSERT(spline_creator.
get_t0()==0);
2405 TEST_ASSERT(spline_creator.
create(pc));
2409 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2412 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2415 for (i=1; i<nseg; ++i)
2417 cont=pc.
continuity(static_cast<data_type>(i));
2422 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(0)));
2424 TEST_ASSERT(tol.approximately_equal(pt_a, pc.
fpp(0)));
2425 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(4)));
2426 TEST_ASSERT(tol.approximately_equal(pt_a, pc.
fpp(4)));
2434 piecewise_curve_type pc;
2435 cubic_spline_creator_type spline_creator(4);
2436 point_type pt_b, pt_a;
2437 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2438 std::vector<data_type> t(5);
2456 spline_creator.
set_t0(t[0]);
2464 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
2466 TEST_ASSERT(dt==t[1]-t[0]);
2468 TEST_ASSERT(dt==t[2]-t[1]);
2470 TEST_ASSERT(dt==t[3]-t[2]);
2472 TEST_ASSERT(dt==t[4]-t[3]);
2475 TEST_ASSERT(spline_creator.
create(pc));
2479 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2482 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
2485 for (i=1; i<nseg; ++i)
2492 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(t[0])));
2493 TEST_ASSERT(tol.approximately_equal(pc.
fp(t[4]), pc.
fp(t[0])));
2494 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(t[4])));
2495 TEST_ASSERT(tol.approximately_equal(pc.
fpp(t[4]), pc.
fpp(t[0])));
2500 piecewise_curve_type pc;
2501 cubic_spline_creator_type spline_creator(4);
2502 point_type pt_b, pt_a;
2503 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2519 TEST_ASSERT(spline_creator.
get_t0()==0);
2530 TEST_ASSERT(spline_creator.
create(pc));
2534 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()-1));
2537 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2540 for (i=1; i<nseg; ++i)
2542 cont=pc.
continuity(static_cast<data_type>(i));
2547 TEST_ASSERT(tol.approximately_equal(pts[0], pc.
f(0)));
2548 TEST_ASSERT(tol.approximately_equal(pc.
fp(0), pc.
fp(4)));
2549 TEST_ASSERT(tol.approximately_equal(pts[4], pc.
f(4)));
2550 TEST_ASSERT(tol.approximately_equal(pc.
fpp(0), pc.
fpp(4)));
2558 piecewise_curve_type pc;
2559 cubic_spline_creator_type spline_creator(5);
2560 point_type pt_b, pt_a;
2561 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2562 std::vector<data_type> t(6);
2581 spline_creator.
set_t0(t[0]);
2589 TEST_ASSERT(spline_creator.
get_t0()==t[0]);
2591 TEST_ASSERT(dt==t[1]-t[0]);
2593 TEST_ASSERT(dt==t[2]-t[1]);
2595 TEST_ASSERT(dt==t[3]-t[2]);
2597 TEST_ASSERT(dt==t[4]-t[3]);
2599 TEST_ASSERT(dt==t[5]-t[4]);
2602 TEST_ASSERT(spline_creator.
create(pc));
2606 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
2609 TEST_ASSERT(tol.approximately_equal(t[0], pc.
get_t0()));
2612 for (i=1; i<nseg; ++i)
2627 piecewise_curve_type pc;
2628 cubic_spline_creator_type spline_creator(5);
2629 point_type pt_b, pt_a;
2630 std::vector<point_type, Eigen::aligned_allocator<point_type> > pts(5);
2646 TEST_ASSERT(spline_creator.
get_t0()==0);
2659 TEST_ASSERT(spline_creator.
create(pc));
2663 TEST_ASSERT(nseg==static_cast<index_type>(pts.size()));
2666 TEST_ASSERT(tol.approximately_equal(0, pc.
get_t0()));
2669 for (i=1; i<nseg; ++i)
2671 cont=pc.
continuity(static_cast<data_type>(i));
void set_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:773
void create_control_points_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:216
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
Definition: continuity.hpp:28
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 AddTests(const double &)
Definition: piecewise_cubic_spline_creator_test_suite.hpp:62
void create_piecewise_kochanek_bartels_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:1669
void set_segment_dt(const data_type &dtt, const index_type &i)
Definition: piecewise_creator_base.hpp:64
piecewise_curve_type::data_type data_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:35
piecewise_curve_type::index_type index_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:36
void create_closed_cubic_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:2554
tol__ tolerance_type
Definition: piecewise.hpp:278
void create_piecewise_chip_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:540
void set_chip(point_it__ itb, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:141
data__ data_type
Definition: piecewise.hpp:276
void AddTests(const long double &)
Definition: piecewise_cubic_spline_creator_test_suite.hpp:81
data_type get_parameter_min() const
Definition: piecewise.hpp:366
curve_type::index_type index_type
Definition: piecewise.hpp:271
index_type number_segments() const
Definition: piecewise.hpp:419
void set_cardinal(point_it__ itb, const data__ &c, const eli::geom::general::continuity &end_cont)
Definition: piecewise_cubic_spline_creator.hpp:390
bool closed() const
Definition: piecewise.hpp:501
piecewise_cubic_spline_creator_test_suite()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:102
void create_clamped_cubic_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:2174
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
point_type fpp(const data_type &t) const
Definition: piecewise.hpp:1765
Definition: continuity.hpp:27
curve__< data__, dim__, tol__ > curve_type
Definition: piecewise.hpp:270
void create_closed_piecewise_kochanek_bartels_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:1777
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
eli::geom::curve::piecewise_cubic_spline_creator< data__, 3, tolerance_type > cubic_spline_creator_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:38
void AddTests(const float &)
Definition: piecewise_cubic_spline_creator_test_suite.hpp:43
Definition: continuity.hpp:30
void create_piecewise_cardinal_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:917
void create_natural_cubic_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:2304
Definition: piecewise_cubic_spline_creator.hpp:35
void create_closed_piecewise_catmull_rom_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:1402
piecewise_curve_type::curve_type curve_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:33
void create_points_slopes_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:372
void create_piecewise_catmull_rom_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:1294
void create_cubic_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:2040
~piecewise_cubic_spline_creator_test_suite()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:106
virtual bool create(piecewise< bezier, data_type, dim__, tolerance_type > &pc) const
Definition: piecewise_cubic_spline_creator.hpp:90
eli::geom::curve::piecewise< eli::geom::curve::bezier, data__, 3 > piecewise_curve_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:32
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
data_type get_parameter_max() const
Definition: piecewise.hpp:374
piecewise_curve_type::tolerance_type tolerance_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:37
point_type fp(const data_type &t) const
Definition: piecewise.hpp:1748
data_type get_t0() const
Definition: piecewise.hpp:335
piecewise_curve_type::point_type point_type
Definition: piecewise_cubic_spline_creator_test_suite.hpp:34
void set_natural_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:866
point_type f(const data_type &t) const
Definition: piecewise.hpp:1732
continuity
Definition: continuity.hpp:24
Definition: piecewise_cubic_spline_creator_test_suite.hpp:29
error_code get(curve_type &curve, const index_type &index) const
Definition: piecewise.hpp:729
data_type get_t0() const
Definition: piecewise_creator_base.hpp:62
tolerance_type tol
Definition: piecewise_cubic_spline_creator_test_suite.hpp:40
void octave_print(int figno, const piecewise_curve_type &pc) const
Definition: piecewise_cubic_spline_creator_test_suite.hpp:111
curve_type::point_type point_type
Definition: piecewise.hpp:272
void set_t0(const data_type &tt0)
Definition: piecewise_creator_base.hpp:61
void create_closed_piecewise_cardinal_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:1025
void create_closed_piecewise_chip_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:648
void set_closed_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:900
Definition: continuity.hpp:29
void set_periodic_cubic_spline(point_it__ itb)
Definition: piecewise_cubic_spline_creator.hpp:923
eli::geom::general::continuity continuity(const data_type &t) const
Definition: piecewise.hpp:1486
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
void create_periodic_cubic_spline_test()
Definition: piecewise_cubic_spline_creator_test_suite.hpp:2430