13 #ifndef piecewise_curve_test_suite_hpp
14 #define piecewise_curve_test_suite_hpp
31 template<
typename data__>
101 index_type i, pp, ns;
106 std::cout <<
"figure(" << figno <<
");" << std::endl;
109 std::cout <<
"cp_x=[";
110 for (pp=0; pp<ns; ++pp)
114 for (i=0; i<=bez.degree(); ++i)
116 std::cout << bez.get_control_point(i).x();
123 std::cout <<
"];" << std::endl;
125 std::cout <<
"cp_y=[";
126 for (pp=0; pp<ns; ++pp)
130 for (i=0; i<=bez.degree(); ++i)
132 std::cout << bez.get_control_point(i).y();
139 std::cout <<
"];" << std::endl;
141 std::cout <<
"cp_z=[";
142 for (pp=0; pp<ns; ++pp)
146 for (i=0; i<=bez.degree(); ++i)
148 std::cout << bez.get_control_point(i).z();
155 std::cout <<
"];" << std::endl;
158 std::vector<data_type> t(129);
159 for (i=0; i<static_cast<index_type>(t.size()); ++i)
161 t[i]=tmin+(tmax-tmin)*static_cast<data_type>(i)/(t.size()-1);
165 std::cout <<
"surf_x=[";
166 for (i=0; i<static_cast<index_type>(t.size()); ++i)
168 std::cout << pc.
f(t[i]).x();
169 if (i<static_cast<index_type>(t.size()-1))
172 std::cout <<
"];" << std::endl;
174 std::cout <<
"surf_y=[";
175 for (i=0; i<static_cast<index_type>(t.size()); ++i)
177 std::cout << pc.
f(t[i]).y();
178 if (i<static_cast<index_type>(t.size()-1))
181 std::cout <<
"];" << std::endl;
183 std::cout <<
"surf_z=[";
184 for (i=0; i<static_cast<index_type>(t.size()); ++i)
186 std::cout << pc.
f(t[i]).z();
187 if (i<static_cast<index_type>(t.size()-1))
190 std::cout <<
"];" << std::endl;
192 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
193 std::cout <<
"plot3(surf_x, surf_y, surf_z, '-k');" << std::endl;
194 std::cout <<
"hold on;" << std::endl;
195 std::cout <<
"plot3(cp_x', cp_y', cp_z', '-ok', 'MarkerFaceColor', [0 0 0]);" << std::endl;
196 std::cout <<
"hold off;" << std::endl;
201 piecewise_curve_type c1, c2;
202 curve_type bc[3], bc2, bc_out;
203 data_type dt[3], dt_out;
205 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3], cntrl2a_in[2];
209 cntrl1_in[0] << 2.0, 2.0, 0.0;
210 cntrl1_in[1] << 1.0, 1.5, 0.0;
211 cntrl1_in[2] << 3.5, 0.0, 0.0;
212 cntrl1_in[3] << 4.0, 1.0, 0.0;
217 bc[0].set_control_point(cntrl1_in[i], i);
219 cntrl2_in[0] << 4.0, 1.0, 0.0;
220 cntrl2_in[1] << 5.0, 2.5, 0.0;
221 cntrl2_in[2] << 5.5, 1.0, 0.0;
222 cntrl2_in[3] << 6.0, 0.0, 0.0;
223 cntrl2_in[4] << 6.5,-0.5, 0.0;
228 bc[1].set_control_point(cntrl2_in[i], i);
230 cntrl3_in[0] << 6.5,-0.5, 0.0;
231 cntrl3_in[1] << 6.0,-1.0, 0.0;
232 cntrl3_in[2] << 5.5,-2.0, 0.0;
237 bc[2].set_control_point(cntrl3_in[i], i);
241 err=c1.
set(bc, bc+2);
244 err=c1.
get(bc_out, dt_out, 0);
246 TEST_ASSERT(bc[0]==bc_out);
247 TEST_ASSERT(dt_out==1);
248 err=c1.
get(bc_out, dt_out, 1);
250 TEST_ASSERT(bc[1]==bc_out);
251 TEST_ASSERT(dt_out==1);
261 err=c1.
get(bc_out, dt_out, 0);
263 TEST_ASSERT(bc[0]==bc_out);
264 TEST_ASSERT(dt[0]==dt_out);
265 err=c1.
get(bc_out, dt_out, 1);
267 TEST_ASSERT(bc[1]==bc_out);
268 TEST_ASSERT(dt[1]==dt_out);
271 err=c1.
get(bc_out, dt_out, 3);
279 cntrl2a_in[0] << 1.0, 1.0, 0.0;
280 cntrl2a_in[1] << 2.0, 2.0, 0.0;
284 bc2.set_control_point(cntrl2a_in[i], i);
288 err=c1.
get(bc_out, dt_out, 0);
290 TEST_ASSERT(bc2==bc_out);
291 TEST_ASSERT(dt_out==1);
295 TEST_ASSERT(c1.
get_t0()==-1.5);
298 piecewise_curve_type c1copy(c1);
299 TEST_ASSERT(c1==c1copy);
308 piecewise_curve_type pc;
312 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3];
316 cntrl1_in[0] << 2.0, 2.0, 0.0;
317 cntrl1_in[1] << 1.0, 1.5, 0.0;
318 cntrl1_in[2] << 3.5, 0.0, 0.0;
319 cntrl1_in[3] << 4.0, 1.0, 0.0;
324 bc[0].set_control_point(cntrl1_in[i], i);
326 cntrl2_in[0] << 4.0, 1.0, 0.0;
327 cntrl2_in[1] << 5.0, 2.5, 0.0;
328 cntrl2_in[2] << 5.5, 1.0, 0.0;
329 cntrl2_in[3] << 6.0, 0.0, 0.0;
330 cntrl2_in[4] << 6.5,-0.5, 0.0;
335 bc[1].set_control_point(cntrl2_in[i], i);
337 cntrl3_in[0] << 6.5,-0.5, 0.0;
338 cntrl3_in[1] << 6.0,-1.0, 0.0;
339 cntrl3_in[2] << 5.5,-2.0, 0.0;
344 bc[2].set_control_point(cntrl3_in[i], i);
348 err=pc.
set(bc, bc+3, dt);
353 point_type pmin_ref, pmax_ref;
356 pmin_ref << 1, -2, 0;
357 pmax_ref << 6.5, 2.5, 0;
358 TEST_ASSERT(bb.get_min()==pmin_ref);
359 TEST_ASSERT(bb.get_max()==pmax_ref);
364 piecewise_curve_type c1, c2;
365 curve_type bc[3], bc1_out, bc2_out;
366 data_type dt[3], dt1_out, dt2_out;
368 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3];
372 cntrl1_in[0] << 2.0, 2.0, 0.0;
373 cntrl1_in[1] << 1.0, 1.5, 0.0;
374 cntrl1_in[2] << 3.5, 0.0, 0.0;
375 cntrl1_in[3] << 4.0, 1.0, 0.0;
380 bc[0].set_control_point(cntrl1_in[i], i);
382 cntrl2_in[0] << 4.0, 1.0, 0.0;
383 cntrl2_in[1] << 5.0, 2.5, 0.0;
384 cntrl2_in[2] << 5.5, 1.0, 0.0;
385 cntrl2_in[3] << 6.0, 0.0, 0.0;
386 cntrl2_in[4] << 6.5,-0.5, 0.0;
391 bc[1].set_control_point(cntrl2_in[i], i);
393 cntrl3_in[0] << 6.5,-0.5, 0.0;
394 cntrl3_in[1] << 6.0,-1.0, 0.0;
395 cntrl3_in[2] << 5.5,-2.0, 0.0;
400 bc[2].set_control_point(cntrl3_in[i], i);
404 err=c1.
set(bc, bc+3, dt);
411 c1.
get(bc1_out, dt1_out, i);
413 for (index_type ii=0; ii<=bc1_out.degree(); ++ii)
415 TEST_ASSERT(bc1_out.get_control_point(ii)==bc2_out.get_control_point(bc1_out.degree()-ii));
422 piecewise_curve_type c1, c1c, c2, c3;
423 curve_type bc[3], bc2, bc_out;
424 data_type dt[3], dt_out;
426 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3], cntrl2a_in[2];
430 cntrl1_in[0] << 2.0, 2.0, 0.0;
431 cntrl1_in[1] << 1.0, 1.5, 0.0;
432 cntrl1_in[2] << 3.5, 0.0, 0.0;
433 cntrl1_in[3] << 4.0, 1.0, 0.0;
438 bc[0].set_control_point(cntrl1_in[i], i);
440 cntrl2_in[0] << 4.0, 1.0, 0.0;
441 cntrl2_in[1] << 5.0, 2.5, 0.0;
442 cntrl2_in[2] << 5.5, 1.0, 0.0;
443 cntrl2_in[3] << 6.0, 0.0, 0.0;
444 cntrl2_in[4] << 6.5,-0.5, 0.0;
449 bc[1].set_control_point(cntrl2_in[i], i);
451 cntrl3_in[0] << 6.5,-0.5, 0.0;
452 cntrl3_in[1] << 6.0,-1.0, 0.0;
453 cntrl3_in[2] << 5.5,-2.0, 0.0;
458 bc[2].set_control_point(cntrl3_in[i], i);
462 err=c1.
set(bc, bc+3, dt);
466 cntrl2a_in[0] << 4.0, 1.0, 0.0;
467 cntrl2a_in[1] << 6.5,-0.5, 0.0;
471 bc2.set_control_point(cntrl2a_in[i], i);
475 err=c1.
get(bc_out, dt_out, 1);
477 TEST_ASSERT(bc2==bc_out);
478 TEST_ASSERT(dt[1]==dt_out);
481 cntrl2a_in[0] << 4.0, 1.0, 0.0;
482 cntrl2a_in[1] << 5.5,-0.5, 0.0;
486 bc2.set_control_point(cntrl2a_in[i], i);
490 cntrl2a_in[0] << 4.0, 2.0, 0.0;
491 cntrl2a_in[1] << 6.5,-0.5, 0.0;
495 bc2.set_control_point(cntrl2a_in[i], i);
502 cntrl1_in[0] << 4.0, 1.0, 0.0;
503 cntrl1_in[1] << 3.0, 1.5, 0.0;
504 cntrl1_in[2] << 3.5, 2.0, 0.0;
505 cntrl1_in[3] << 5.5, 2.5, 0.0;
510 bc[0].set_control_point(cntrl1_in[i], i);
512 cntrl2_in[0] << 5.5, 2.5, 0.0;
513 cntrl2_in[1] << 5.0, 2.5, 0.0;
514 cntrl2_in[2] << 5.5, 2.0, 0.0;
515 cntrl2_in[3] << 5.0, 2.0, 0.0;
516 cntrl2_in[4] << 5.0, 0.5, 0.0;
521 bc[1].set_control_point(cntrl2_in[i], i);
523 cntrl3_in[0] << 5.0, 0.5, 0.0;
524 cntrl3_in[1] << 5.5, 0.0, 0.0;
525 cntrl3_in[2] << 6.5,-0.5, 0.0;
530 bc[2].set_control_point(cntrl3_in[i], i);
532 err=c2.
set(bc, bc+3, dt);
538 err=c1.
get(bc_out, dt_out, 1);
540 TEST_ASSERT(bc[0]==bc_out);
541 TEST_ASSERT(dt[0]==dt_out);
542 err=c1.
get(bc_out, dt_out, 2);
544 TEST_ASSERT(bc[1]==bc_out);
545 TEST_ASSERT(dt[1]==dt_out);
546 err=c1.
get(bc_out, dt_out, 3);
548 TEST_ASSERT(bc[2]==bc_out);
549 TEST_ASSERT(dt[2]==dt_out);
554 cntrl1_in[0] << 5.0, 1.0, 0.0;
555 cntrl1_in[1] << 3.0, 1.5, 0.0;
556 cntrl1_in[2] << 3.5, 2.0, 0.0;
557 cntrl1_in[3] << 5.5, 2.5, 0.0;
562 bc[0].set_control_point(cntrl1_in[i], i);
564 cntrl2_in[0] << 5.5, 2.5, 0.0;
565 cntrl2_in[1] << 5.0, 2.5, 0.0;
566 cntrl2_in[2] << 5.5, 2.0, 0.0;
567 cntrl2_in[3] << 5.0, 2.0, 0.0;
568 cntrl2_in[4] << 5.0, 0.5, 0.0;
573 bc[1].set_control_point(cntrl2_in[i], i);
575 cntrl3_in[0] << 5.0, 0.5, 0.0;
576 cntrl3_in[1] << 5.5, 0.0, 0.0;
577 cntrl3_in[2] << 6.5,-0.5, 0.0;
582 bc[2].set_control_point(cntrl3_in[i], i);
584 err=c2.
set(bc, bc+3, dt);
589 cntrl1_in[0] << 4.0, 1.0, 0.0;
590 cntrl1_in[1] << 3.0, 1.5, 0.0;
591 cntrl1_in[2] << 3.5, 2.0, 0.0;
592 cntrl1_in[3] << 5.5, 2.5, 0.0;
596 bc[0].set_control_point(cntrl1_in[i], i);
598 cntrl2_in[0] << 5.5, 2.5, 0.0;
599 cntrl2_in[1] << 5.0, 2.5, 0.0;
600 cntrl2_in[2] << 5.5, 2.0, 0.0;
601 cntrl2_in[3] << 5.0, 2.0, 0.0;
602 cntrl2_in[4] << 5.0, 0.5, 0.0;
606 bc[1].set_control_point(cntrl2_in[i], i);
608 cntrl3_in[0] << 5.0, 0.5, 0.0;
609 cntrl3_in[1] << 5.5, 0.0, 0.0;
610 cntrl3_in[2] << 7.5,-0.5, 0.0;
614 bc[2].set_control_point(cntrl3_in[i], i);
616 err=c2.
set(bc, bc+3, dt);
624 cntrl2a_in[0] << 4.0, 1.0, 0.0;
625 cntrl2a_in[1] << 5.0, 0.5, 0.0;
629 bc2.set_control_point(cntrl2a_in[i], i);
634 err=c1.
get(bc_out, dt_out, 1);
636 TEST_ASSERT(bc2==bc_out);
641 cntrl2a_in[0] << 4.5, 1.0, 0.0;
642 cntrl2a_in[1] << 5.0, 0.5, 0.0;
646 bc2.set_control_point(cntrl2a_in[i], i);
650 cntrl2a_in[0] << 4.0, 1.0, 0.0;
651 cntrl2a_in[1] << 5.5, 0.5, 0.0;
655 bc2.set_control_point(cntrl2a_in[i], i);
663 cntrl1_in[0] << 4.0, 1.0, 0.0;
664 cntrl1_in[1] << 3.0, 1.5, 0.0;
665 cntrl1_in[2] << 3.5, 2.0, 0.0;
666 cntrl1_in[3] << 5.5, 2.5, 0.0;
671 bc[0].set_control_point(cntrl1_in[i], i);
673 cntrl2_in[0] << 5.5, 2.5, 0.0;
674 cntrl2_in[1] << 5.0, 2.5, 0.0;
675 cntrl2_in[2] << 4.5, 2.0, 0.0;
676 cntrl2_in[3] << 4.0, 2.0, 0.0;
677 cntrl2_in[4] << 3.5, 0.5, 0.0;
682 bc[1].set_control_point(cntrl2_in[i], i);
684 cntrl3_in[0] << 3.5, 0.5, 0.0;
685 cntrl3_in[1] << 4.5, 0.0, 0.0;
686 cntrl3_in[2] << 6.5,-0.5, 0.0;
691 bc[2].set_control_point(cntrl3_in[i], i);
693 err=c2.
set(bc, bc+3, dt);
699 err=c1.
get(bc_out, dt_out, 1);
701 TEST_ASSERT(bc[0]==bc_out);
702 TEST_ASSERT(dt[0]==dt_out);
703 err=c1.
get(bc_out, dt_out, 2);
705 TEST_ASSERT(bc[1]==bc_out);
706 TEST_ASSERT(dt[1]==dt_out);
707 err=c1.
get(bc_out, dt_out, 3);
709 TEST_ASSERT(bc[2]==bc_out);
710 TEST_ASSERT(dt[2]==dt_out);
714 cntrl1_in[0] << 3.0, 1.0, 0.0;
715 cntrl1_in[1] << 3.0, 1.5, 0.0;
716 cntrl1_in[2] << 3.5, 2.0, 0.0;
717 cntrl1_in[3] << 5.5, 2.5, 0.0;
722 bc[0].set_control_point(cntrl1_in[i], i);
724 cntrl2_in[0] << 5.5, 2.5, 0.0;
725 cntrl2_in[1] << 5.0, 2.5, 0.0;
726 cntrl2_in[2] << 4.5, 2.0, 0.0;
727 cntrl2_in[3] << 4.0, 2.0, 0.0;
728 cntrl2_in[4] << 3.5, 0.5, 0.0;
733 bc[1].set_control_point(cntrl2_in[i], i);
735 cntrl3_in[0] << 3.5, 0.5, 0.0;
736 cntrl3_in[1] << 4.5, 0.0, 0.0;
737 cntrl3_in[2] << 6.5,-0.5, 0.0;
742 bc[2].set_control_point(cntrl3_in[i], i);
744 err=c2.
set(bc, bc+3, dt);
748 cntrl1_in[0] << 4.0, 1.0, 0.0;
749 cntrl1_in[1] << 3.0, 1.5, 0.0;
750 cntrl1_in[2] << 3.5, 2.0, 0.0;
751 cntrl1_in[3] << 5.5, 2.5, 0.0;
756 bc[0].set_control_point(cntrl1_in[i], i);
758 cntrl2_in[0] << 5.5, 2.5, 0.0;
759 cntrl2_in[1] << 5.0, 2.5, 0.0;
760 cntrl2_in[2] << 4.5, 2.0, 0.0;
761 cntrl2_in[3] << 4.0, 2.0, 0.0;
762 cntrl2_in[4] << 3.5, 0.5, 0.0;
767 bc[1].set_control_point(cntrl2_in[i], i);
769 cntrl3_in[0] << 3.5, 0.5, 0.0;
770 cntrl3_in[1] << 4.5, 0.0, 0.0;
771 cntrl3_in[2] << 5.5,-0.5, 0.0;
776 bc[2].set_control_point(cntrl3_in[i], i);
778 err=c2.
set(bc, bc+3, dt);
787 data_type eps(std::numeric_limits<data__>::epsilon());
789 piecewise_curve_type pwc, pwc2;
790 typename curve_type::control_point_type cntrl_in[4];
791 curve_type bc1, bc1l, bc1r;
792 point_type eval_out, eval_ref;
794 tl =
static_cast<data__
>(0.3);
795 ts =
static_cast<data__
>(0.586);
798 cntrl_in[0] << 0, 0, 0;
799 cntrl_in[1] << 0, 2, 0;
800 cntrl_in[2] << 8, 2, 0;
801 cntrl_in[3] << 4, 0, 0;
803 for (index_type i=0; i<4; ++i)
805 bc1.set_control_point(cntrl_in[i], i);
809 bc1.split(bc1l, bc1r, ts);
825 eval_ref=pwc.
f(tl)+trans;
826 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
836 rmat << std::cos(one), 0, -std::sin(one),
838 std::sin(one), 0, std::cos(one);
843 eval_ref=pwc.
f(tl)*rmat.transpose();
844 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
856 rmat << std::cos(one), 0, -std::sin(one),
858 std::sin(one), 0, std::cos(one);
863 eval_ref=rorig+(pwc.
f(tl)-rorig)*rmat.transpose();
864 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
870 data_type eps(std::numeric_limits<data__>::epsilon());
874 piecewise_curve_type pwc;
875 typename curve_type::control_point_type cntrl_in[4];
876 curve_type bc1, bc1l, bc1r;
877 point_type eval_out, eval_ref;
878 data_type t, tl, tr, ts;
879 tl =
static_cast<data__
>(0.3);
880 tr =
static_cast<data__
>(0.87);
881 ts =
static_cast<data__
>(0.586);
884 cntrl_in[0] << 0, 0, 0;
885 cntrl_in[1] << 0, 2, 0;
886 cntrl_in[2] << 8, 2, 0;
887 cntrl_in[3] << 4, 0, 0;
889 for (index_type i=0; i<4; ++i)
891 bc1.set_control_point(cntrl_in[i], i);
895 bc1.split(bc1l, bc1r, ts);
904 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
906 eval_ref=bc1.fp(t)*ts;
907 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
908 eval_out=pwc.
fpp(tl);
909 eval_ref=bc1.fpp(t)*ts*ts;
910 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
911 eval_out=pwc.
fppp(tl);
912 eval_ref=bc1.fppp(t)*ts*ts*ts;
913 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
917 eval_out=pwc.
f(1+tr);
919 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
920 eval_out=pwc.
fp(1+tr);
921 eval_ref=bc1.fp(t)*(1-ts);
922 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
923 eval_out=pwc.
fpp(1+tr);
924 eval_ref=bc1.fpp(t)*(1-ts)*(1-ts);
925 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
926 eval_out=pwc.
fppp(1+tr);
927 eval_ref=bc1.fppp(t)*(1-ts)*(1-ts)*(1-ts);
928 TEST_ASSERT((eval_out-eval_ref).norm()<1.21e2*eps);
933 piecewise_curve_type pwc;
934 typename curve_type::control_point_type cntrl_in[4];
935 curve_type bc1, bc1l, bc1r;
936 point_type eval_out, eval_ref;
937 data_type tl, tr, ts;
938 tl =
static_cast<data__
>(0.3);
939 tr =
static_cast<data__
>(0.87);
940 ts =
static_cast<data__
>(0.586);
943 cntrl_in[0] << 0, 0, 0;
944 cntrl_in[1] << 0, 2, 0;
945 cntrl_in[2] << 8, 2, 0;
946 cntrl_in[3] << 4, 0, 0;
948 for (index_type i=0; i<4; ++i)
950 bc1.set_control_point(cntrl_in[i], i);
954 bc1.split(bc1l, bc1r, ts);
962 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
965 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
966 eval_out=pwc.
fpp(tl);
967 eval_ref=bc1.fpp(tl);
968 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
969 eval_out=pwc.
fppp(tl);
970 eval_ref=bc1.fppp(tl);
971 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
976 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
979 TEST_ASSERT((eval_out-eval_ref).norm()<1e2*eps);
980 eval_out=pwc.
fpp(tr);
981 eval_ref=bc1.fpp(tr);
982 TEST_ASSERT((eval_out-eval_ref).norm()<2.6e2*eps);
983 eval_out=pwc.
fppp(tr);
984 eval_ref=bc1.fppp(tr);
985 TEST_ASSERT((eval_out-eval_ref).norm()<1.8e3*eps);
991 data_type eps(std::numeric_limits<data__>::epsilon());
992 piecewise_curve_type pwc0, pwc1, pwc_front, pwc_back;
993 typename curve_type::control_point_type cntrl_in[4];
996 point_type eval_out, eval_ref;
998 ts=
static_cast<data__
>(1.56);
1001 cntrl_in[0] << 0, 0, 0;
1002 cntrl_in[1] << 0, 2, 0;
1003 cntrl_in[2] << 8, 2, 0;
1004 cntrl_in[3] << 4, 0, 0;
1006 for (index_type i=0; i<4; ++i)
1008 bc.set_control_point(cntrl_in[i], i);
1012 cntrl_in[0] << 4, 0, 0;
1013 cntrl_in[1] << 3, -0.5, 0;
1014 cntrl_in[2] << 2, -1, 0;
1015 cntrl_in[3] << 1, -1, 0;
1017 for (index_type i=0; i<4; ++i)
1019 bc.set_control_point(cntrl_in[i], i);
1034 TEST_ASSERT(eval_out==eval_ref);
1035 eval_out=pwc0.
fp(t);
1036 eval_ref=pwc1.fp(t);
1037 TEST_ASSERT(eval_out==eval_ref);
1038 eval_out=pwc0.
fpp(t);
1039 eval_ref=pwc1.fpp(t);
1040 TEST_ASSERT(eval_out==eval_ref);
1041 eval_out=pwc0.
fppp(t);
1042 eval_ref=pwc1.fppp(t);
1043 TEST_ASSERT(eval_out==eval_ref);
1048 TEST_ASSERT(eval_out==eval_ref);
1049 eval_out=pwc0.
fp(t);
1050 eval_ref=pwc1.fp(t);
1051 TEST_ASSERT(eval_out==eval_ref);
1052 eval_out=pwc0.
fpp(t);
1053 eval_ref=pwc1.fpp(t);
1054 TEST_ASSERT(eval_out==eval_ref);
1055 eval_out=pwc0.
fppp(t);
1056 eval_ref=pwc1.fppp(t);
1057 TEST_ASSERT(eval_out==eval_ref);
1062 TEST_ASSERT(eval_out==eval_ref);
1063 eval_out=pwc0.
fp(t);
1064 eval_ref=pwc1.fp(t);
1065 TEST_ASSERT(eval_out==eval_ref);
1066 eval_out=pwc0.
fpp(t);
1067 eval_ref=pwc1.fpp(t);
1068 TEST_ASSERT(eval_out==eval_ref);
1069 eval_out=pwc0.
fppp(t);
1070 eval_ref=pwc1.fppp(t);
1071 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1076 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1077 eval_out=pwc0.
fp(t);
1078 eval_ref=pwc1.fp(t);
1079 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1080 eval_out=pwc0.
fpp(t);
1081 eval_ref=pwc1.fpp(t);
1082 TEST_ASSERT((eval_out-eval_ref).norm()<18*eps);
1083 eval_out=pwc0.
fppp(t);
1084 eval_ref=pwc1.fppp(t);
1085 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1090 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1091 eval_out=pwc0.
fp(t);
1092 eval_ref=pwc1.fp(t);
1093 TEST_ASSERT((eval_out-eval_ref).norm()<7*eps);
1094 eval_out=pwc0.
fpp(t);
1095 eval_ref=pwc1.fpp(t);
1096 TEST_ASSERT((eval_out-eval_ref).norm()<35*eps);
1097 eval_out=pwc0.
fppp(t);
1098 eval_ref=pwc1.fppp(t);
1099 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1104 TEST_ASSERT((eval_out-eval_ref).norm()<2*eps);
1105 eval_out=pwc0.
fp(t);
1106 eval_ref=pwc1.fp(t);
1107 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1108 eval_out=pwc0.
fpp(t);
1109 eval_ref=pwc1.fpp(t);
1110 TEST_ASSERT((eval_out-eval_ref).norm()<28*eps);
1111 eval_out=pwc0.
fppp(t);
1112 eval_ref=pwc1.fppp(t);
1113 TEST_ASSERT((eval_out-eval_ref).norm()<142*eps);
1117 TEST_ASSERT((eval_out-eval_ref).norm()<2*eps);
1118 eval_out=pwc0.
fp(t);
1119 eval_ref=pwc1.fp(t);
1120 TEST_ASSERT((eval_out-eval_ref).norm()<9*eps);
1121 eval_out=pwc0.
fpp(t);
1122 eval_ref=pwc1.fpp(t);
1123 TEST_ASSERT((eval_out-eval_ref).norm()<63*eps);
1124 eval_out=pwc0.
fppp(t);
1125 eval_ref=pwc1.fppp(t);
1126 TEST_ASSERT((eval_out-eval_ref).norm()<142*eps);
1130 err=pwc0.
split(pwc_front, pwc_back, ts);
1133 TEST_ASSERT(pwc_front.
get_tmax()==ts);
1134 TEST_ASSERT(pwc_back.
get_t0()==ts);
1138 eval_out=pwc_front.
f(t);
1140 TEST_ASSERT(eval_out==eval_ref);
1141 eval_out=pwc_front.
fp(t);
1142 eval_ref=pwc0.
fp(t);
1143 TEST_ASSERT(eval_out==eval_ref);
1144 eval_out=pwc_front.
fpp(t);
1145 eval_ref=pwc0.
fpp(t);
1146 TEST_ASSERT(eval_out==eval_ref);
1147 eval_out=pwc_front.
fppp(t);
1148 eval_ref=pwc0.
fppp(t);
1149 TEST_ASSERT(eval_out==eval_ref);
1152 eval_out=pwc_front.
f(t);
1154 TEST_ASSERT(eval_out==eval_ref);
1155 eval_out=pwc_front.
fp(t);
1156 eval_ref=pwc0.
fp(t);
1157 TEST_ASSERT(eval_out==eval_ref);
1158 eval_out=pwc_front.
fpp(t);
1159 eval_ref=pwc0.
fpp(t);
1160 TEST_ASSERT(eval_out==eval_ref);
1161 eval_out=pwc_front.
fppp(t);
1162 eval_ref=pwc0.
fppp(t);
1163 TEST_ASSERT(eval_out==eval_ref);
1166 eval_out=pwc_front.
f(t);
1168 TEST_ASSERT(eval_out==eval_ref);
1169 eval_out=pwc_front.
fp(t);
1170 eval_ref=pwc0.
fp(t);
1171 TEST_ASSERT(eval_out==eval_ref);
1172 eval_out=pwc_front.
fpp(t);
1173 eval_ref=pwc0.
fpp(t);
1174 TEST_ASSERT(eval_out==eval_ref);
1175 eval_out=pwc_front.
fppp(t);
1176 eval_ref=pwc0.
fppp(t);
1177 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1180 eval_out=pwc_front.
f(t);
1182 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1183 eval_out=pwc_front.
fp(t);
1184 eval_ref=pwc0.
fp(t);
1185 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1186 eval_out=pwc_front.
fpp(t);
1187 eval_ref=pwc0.
fpp(t);
1188 TEST_ASSERT((eval_out-eval_ref).norm()<18*eps);
1189 eval_out=pwc_front.
fppp(t);
1190 eval_ref=pwc0.
fppp(t);
1191 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1194 eval_out=pwc_front.
f(t);
1196 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1197 eval_out=pwc_front.
fp(t);
1198 eval_ref=pwc0.
fp(t);
1199 TEST_ASSERT((eval_out-eval_ref).norm()<7*eps);
1200 eval_out=pwc_front.
fpp(t);
1201 eval_ref=pwc0.
fpp(t);
1202 TEST_ASSERT((eval_out-eval_ref).norm()<35*eps);
1203 eval_out=pwc_front.
fppp(t);
1204 eval_ref=pwc0.
fppp(t);
1205 TEST_ASSERT((eval_out-eval_ref).norm()<138*eps);
1208 eval_out=pwc_back.
f(t);
1210 TEST_ASSERT((eval_out-eval_ref).norm()<2*eps);
1211 eval_out=pwc_back.
fp(t);
1212 eval_ref=pwc0.
fp(t);
1213 TEST_ASSERT((eval_out-eval_ref).norm()<3*eps);
1214 eval_out=pwc_back.
fpp(t);
1215 eval_ref=pwc0.
fpp(t);
1216 TEST_ASSERT((eval_out-eval_ref).norm()<28*eps);
1217 eval_out=pwc_back.
fppp(t);
1218 eval_ref=pwc0.
fppp(t);
1219 TEST_ASSERT((eval_out-eval_ref).norm()<142*eps);
1221 eval_out=pwc_back.
f(t);
1223 TEST_ASSERT((eval_out-eval_ref).norm()<2*eps);
1224 eval_out=pwc_back.
fp(t);
1225 eval_ref=pwc0.
fp(t);
1226 TEST_ASSERT((eval_out-eval_ref).norm()<9*eps);
1227 eval_out=pwc_back.
fpp(t);
1228 eval_ref=pwc0.
fpp(t);
1229 TEST_ASSERT((eval_out-eval_ref).norm()<63*eps);
1230 eval_out=pwc_back.
fppp(t);
1231 eval_ref=pwc0.
fppp(t);
1232 TEST_ASSERT((eval_out-eval_ref).norm()<142*eps);
1239 piecewise_curve_type pwc0, pwc1;
1240 typename curve_type::control_point_type cntrl_in[5];
1243 point_type eval_out, eval_ref;
1247 cntrl_in[0] << 0, 0, 0;
1248 cntrl_in[1] << 0, 2, 0;
1249 cntrl_in[2] << 8, 2, 0;
1250 cntrl_in[3] << 4, 0, 0;
1251 cntrl_in[4] << 6, 3, 0;
1253 for (index_type i=0; i<5; ++i)
1255 bc.set_control_point(cntrl_in[i], i);
1260 cntrl_in[0] << 6, 3, 0;
1261 cntrl_in[1] << 3, -0.5, 0;
1262 cntrl_in[2] << 2, -1, 0;
1263 cntrl_in[3] << 1, -1, 0;
1264 cntrl_in[4] << 2, 1, 0;
1266 for (index_type i=0; i<5; ++i)
1268 bc.set_control_point(cntrl_in[i], i);
1274 index_type mind, maxd;
1277 TEST_ASSERT(mind==4);
1278 TEST_ASSERT(maxd==4);
1284 data_type ttol =
static_cast<data_type
>(0.0001);
1291 pwc1.degree(mind, maxd);
1292 TEST_ASSERT(mind==3);
1293 TEST_ASSERT(maxd==3);
1298 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1303 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1308 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1313 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1318 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1323 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1328 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1333 piecewise_curve_type pwc0, pwc1;
1334 typename curve_type::control_point_type cntrl_in[4];
1337 point_type eval_out, eval_ref;
1338 point_type p, offset;
1342 cntrl_in[0] << 0, 0, 0;
1343 cntrl_in[1] << 0, 2, 0;
1344 cntrl_in[2] << 8, 2, 0;
1345 cntrl_in[3] << 4, 0, 0;
1347 for (index_type i=0; i<4; ++i)
1349 bc.set_control_point(cntrl_in[i], i);
1351 bc.degree_promote_to(bc.degree()+4);
1358 index_type mind, maxd;
1361 TEST_ASSERT(mind==7);
1362 TEST_ASSERT(maxd==7);
1366 data_type ttol =
static_cast<data_type
>(0.0001);
1376 TEST_ASSERT(mind==3);
1377 TEST_ASSERT(maxd==3);
1382 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1384 t=
static_cast<data_type
>(0.235);
1387 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1392 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1397 piecewise_curve_type pwc0, pwc1, pwc2;
1398 typename curve_type::control_point_type cntrl_in[4];
1401 point_type eval_out, eval_ref;
1402 point_type p, offset;
1406 cntrl_in[0] << 0, 0, 0;
1407 cntrl_in[1] << 0, 2, 0;
1408 cntrl_in[2] << 8, 2, 0;
1409 cntrl_in[3] << 4, 0, 0;
1411 for (index_type i=0; i<4; ++i)
1413 bc.set_control_point(cntrl_in[i], i);
1418 bc.degree_promote_to(bc.degree()+4);
1420 p=bc.get_control_point(5);
1421 offset << -1, -1, 0;
1423 bc.set_control_point(p, 5);
1430 index_type mind, maxd;
1433 TEST_ASSERT(mind==7);
1434 TEST_ASSERT(maxd==7);
1438 data_type ttol =
static_cast<data_type
>(0.0001);
1447 TEST_ASSERT(mind==3);
1448 TEST_ASSERT(maxd==3);
1453 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1455 t=
static_cast<data_type
>(0.235);
1458 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1463 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1468 piecewise_curve_type pwc0, pwc1;
1469 typename curve_type::control_point_type cntrl_in[4];
1472 point_type eval_out, eval_ref;
1476 cntrl_in[0] << 0, 0, 0;
1477 cntrl_in[1] << 0, 2, 0;
1478 cntrl_in[2] << 8, 2, 0;
1479 cntrl_in[3] << 4, 0, 0;
1481 for (index_type i=0; i<4; ++i)
1483 bc.set_control_point(cntrl_in[i], i);
1490 index_type mind, maxd;
1493 TEST_ASSERT(mind==3);
1494 TEST_ASSERT(maxd==3);
1498 data_type ttol =
static_cast<data_type
>(0.0001);
1508 TEST_ASSERT(mind==3);
1509 TEST_ASSERT(maxd==3);
1514 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1516 t=
static_cast<data_type
>(0.235);
1519 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1524 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1529 piecewise_curve_type pwc0, pwc1;
1530 typename curve_type::control_point_type cntrl_in[3];
1533 point_type eval_out, eval_ref;
1537 cntrl_in[0] << 0, 0, 0;
1538 cntrl_in[1] << 0, 2, 0;
1539 cntrl_in[2] << 8, 2, 0;
1541 for (index_type i=0; i<3; ++i)
1543 bc.set_control_point(cntrl_in[i], i);
1550 index_type mind, maxd;
1553 TEST_ASSERT(mind==2);
1554 TEST_ASSERT(maxd==2);
1558 data_type ttol =
static_cast<data_type
>(0.0001);
1568 TEST_ASSERT(mind==3);
1569 TEST_ASSERT(maxd==3);
1574 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1576 t=
static_cast<data_type
>(0.235);
1579 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1584 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1589 piecewise_curve_type pwc0, pwc1;
1590 typename curve_type::control_point_type cntrl_in[2];
1593 point_type eval_out, eval_ref;
1597 cntrl_in[0] << 0, 0, 0;
1598 cntrl_in[1] <<
static_cast<data_type
>(1.4), 2, 0;
1600 for (index_type i=0; i<2; ++i)
1602 bc.set_control_point(cntrl_in[i], i);
1609 index_type mind, maxd;
1612 TEST_ASSERT(mind==1);
1613 TEST_ASSERT(maxd==1);
1617 data_type ttol =
static_cast<data_type
>(0.0001);
1627 TEST_ASSERT(mind==3);
1628 TEST_ASSERT(maxd==3);
1633 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1635 t=
static_cast<data_type
>(0.235);
1638 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1643 TEST_ASSERT((eval_out-eval_ref).norm()<ttol);
1649 data_type eps(std::numeric_limits<data__>::epsilon());
1650 piecewise_curve_type c1;
1652 data_type dt[3], len, bc_len[3], ref_len, t0, t1, temp0, temp1;
1653 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3];
1655 data_type tol(std::sqrt(eps));
1658 cntrl1_in[0] << 2.0, 2.0, 0.0;
1659 cntrl1_in[1] << 1.0, 1.5, 0.0;
1660 cntrl1_in[2] << 3.5, 0.0, 0.0;
1661 cntrl1_in[3] << 4.0, 1.0, 0.0;
1664 for (index_type i=0; i<4; ++i)
1666 bc[0].set_control_point(cntrl1_in[i], i);
1669 cntrl2_in[0] << 4.0, 1.0, 0.0;
1670 cntrl2_in[1] << 5.0, 2.5, 0.0;
1671 cntrl2_in[2] << 5.5, 1.0, 0.0;
1672 cntrl2_in[3] << 6.0, 0.0, 0.0;
1673 cntrl2_in[4] << 6.5,-0.5, 0.0;
1676 for (index_type i=0; i<5; ++i)
1678 bc[1].set_control_point(cntrl2_in[i], i);
1681 cntrl3_in[0] << 6.5,-0.5, 0.0;
1682 cntrl3_in[1] << 6.0,-1.0, 0.0;
1683 cntrl3_in[2] << 5.5,-2.0, 0.0;
1686 for (index_type i=0; i<3; ++i)
1688 bc[2].set_control_point(cntrl3_in[i], i);
1691 err=c1.
set(bc, bc+3, dt);
1697 ref_len=bc_len[0]+bc_len[1]+bc_len[2];
1698 TEST_ASSERT(len==ref_len);
1705 TEST_ASSERT(len==ref_len);
1713 ref_len=temp0+temp1;
1714 TEST_ASSERT(std::abs(len-ref_len)<2*tol);
1722 ref_len=temp0+bc_len[1]+temp1;
1723 TEST_ASSERT(std::abs(len-ref_len)<166*tol);
1729 piecewise_curve_type pwc0, pwc1;
1730 typename curve_type::control_point_type cntrl_in[3];
1733 point_type pt0, pt1, ptref;
1734 data_type t[4], rad(static_cast<data_type>(0.2));
1738 cntrl_in[0] << 0, 0, 0;
1739 cntrl_in[1] << 0, 2, 0;
1740 cntrl_in[2] << 1, 1, 0;
1749 bc.set_control_point(cntrl_in[i], 0);
1750 bc.set_control_point(cntrl_in[ip1], 1);
1755 bc.set_control_point(cntrl_in[i], 0);
1756 bc.set_control_point(cntrl_in[ip1], 1);
1761 bc.set_control_point(cntrl_in[i], 0);
1762 bc.set_control_point(cntrl_in[ip1], 1);
1769 TEST_ASSERT(pwc0.
round(rad, 1));
1773 ptref << static_cast<data_type>(0.0291414),
static_cast<data_type
>(1.89247), 0;
1774 TEST_ASSERT(pt0!=pt1);
1775 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1779 TEST_ASSERT(pwc0.
round(rad, 0));
1782 ptref << static_cast<data_type>(0.0414214),
static_cast<data_type
>(0.1), 0;
1783 TEST_ASSERT(pt0!=pt1);
1784 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1788 TEST_ASSERT(pwc0.
round(rad, 3));
1791 ptref << static_cast<data_type>(0.0414214),
static_cast<data_type
>(0.1), 0;
1792 TEST_ASSERT(pt0!=pt1);
1793 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1800 ptref << static_cast<data_type>(0.0414214),
static_cast<data_type
>(0.1), 0;
1801 TEST_ASSERT(pt0!=pt1);
1802 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1805 ptref << static_cast<data_type>(0.0291414),
static_cast<data_type
>(1.89247), 0;
1806 TEST_ASSERT(pt0!=pt1);
1807 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1810 ptref << static_cast<data_type>(0.9171573),
static_cast<data_type
>(1), 0;
1811 TEST_ASSERT(pt0!=pt1);
1812 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1815 ptref << static_cast<data_type>(0.0414214),
static_cast<data_type
>(0.1), 0;
1816 TEST_ASSERT(pt0!=pt1);
1817 TEST_ASSERT((pt0-ptref).norm()<1e-4);
1824 piecewise_curve_type c;
1828 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3];
1832 cntrl1_in[0] << 2.0, 2.0, 0.0;
1833 cntrl1_in[1] << 1.0, 1.5, 0.0;
1834 cntrl1_in[2] << 3.5, 0.0, 0.0;
1835 cntrl1_in[3] << 4.0, 1.0, 0.0;
1840 bc[0].set_control_point(cntrl1_in[i], i);
1842 cntrl2_in[0] << 4.0, 1.0, 0.0;
1843 cntrl2_in[1] << 5.0, 2.5, 0.0;
1844 cntrl2_in[2] << 5.5, 1.0, 0.0;
1845 cntrl2_in[3] << 6.0, 0.0, 0.0;
1846 cntrl2_in[4] << 6.5,-0.5, 0.0;
1851 bc[1].set_control_point(cntrl2_in[i], i);
1853 cntrl3_in[0] << 6.5,-0.5, 0.0;
1854 cntrl3_in[1] << 6.0,-1.0, 0.0;
1855 cntrl3_in[2] << 5.5,-2.0, 0.0;
1860 bc[2].set_control_point(cntrl3_in[i], i);
1863 err=c.
set(bc, bc+3, dt);
1868 std::vector<data_type> disc_joints, disc_joints_ref(2);
1873 joints[1]=joints[0]+dt[0]/2;
1874 joints[2]=joints[0]+dt[0];
1875 joints[3]=joints[2]+dt[1]/2;
1876 joints[4]=joints[2]+dt[1];
1877 joints[5]=joints[4]+dt[2]/2;
1878 joints[6]=joints[4]+dt[2];
1881 disc_joints_ref[0]=joints[2];
1882 disc_joints_ref[1]=joints[4];
1896 TEST_ASSERT(disc_joints.size()==disc_joints_ref.size());
1897 TEST_ASSERT(tol.approximately_equal(disc_joints[0], disc_joints_ref[0]));
1898 TEST_ASSERT(tol.approximately_equal(disc_joints[1], disc_joints_ref[1]));
1903 piecewise_curve_type c;
1907 typename curve_type::control_point_type cntrl1_in[4], cntrl2_in[5], cntrl3_in[3], cntrl4_in[2];
1911 cntrl1_in[0] << 2.0, 2.0, 0.0;
1912 cntrl1_in[1] << 1.0, 1.5, 0.0;
1913 cntrl1_in[2] << 3.5, 0.0, 0.0;
1914 cntrl1_in[3] << 4.0, 1.0, 0.0;
1919 bc[0].set_control_point(cntrl1_in[i], i);
1921 cntrl2_in[0] << 4.0, 1.0, 0.0;
1922 cntrl2_in[1] << 5.0, 2.5, 0.0;
1923 cntrl2_in[2] << 5.5, 1.0, 0.0;
1924 cntrl2_in[3] << 6.0, 0.0, 0.0;
1925 cntrl2_in[4] << 6.5,-0.5, 0.0;
1930 bc[1].set_control_point(cntrl2_in[i], i);
1932 cntrl3_in[0] << 6.5,-0.5, 0.0;
1933 cntrl3_in[1] << 6.0, 2.0, 0.0;
1934 cntrl3_in[2] << 5.0, 3.0, 0.0;
1939 bc[2].set_control_point(cntrl3_in[i], i);
1941 cntrl4_in[0] = cntrl3_in[2];
1942 cntrl4_in[1] = cntrl1_in[0];
1947 bc[3].set_control_point(cntrl4_in[i], i);
1950 err=c.
set(bc, bc+4, dt);
1956 std::vector<data_type> disc_joints, disc_joints_ref(5);
1961 joints[1]=joints[0]+dt[0]/2;
1962 joints[2]=joints[0]+dt[0];
1963 joints[3]=joints[2]+dt[1]/2;
1964 joints[4]=joints[2]+dt[1];
1965 joints[5]=joints[4]+dt[2]/2;
1966 joints[6]=joints[4]+dt[2];
1967 joints[7]=joints[6]+dt[3]/2;
1968 joints[8]=joints[6]+dt[3];
1971 disc_joints_ref[0]=joints[0];
1972 disc_joints_ref[1]=joints[2];
1973 disc_joints_ref[2]=joints[4];
1974 disc_joints_ref[3]=joints[6];
1975 disc_joints_ref[4]=joints[8];
1990 TEST_ASSERT(disc_joints.size()==disc_joints_ref.size());
1991 TEST_ASSERT(tol.approximately_equal(disc_joints[0], disc_joints_ref[0]));
1992 TEST_ASSERT(tol.approximately_equal(disc_joints[1], disc_joints_ref[1]));
1993 TEST_ASSERT(tol.approximately_equal(disc_joints[2], disc_joints_ref[2]));
1994 TEST_ASSERT(tol.approximately_equal(disc_joints[3], disc_joints_ref[3]));
1995 TEST_ASSERT(tol.approximately_equal(disc_joints[4], disc_joints_ref[4]));
curve_type::bounding_box_type bounding_box_type
Definition: piecewise.hpp:275
Definition: continuity.hpp:28
data_type get_tmax() const
Definition: piecewise.hpp:333
void AddTests(const double &)
Definition: piecewise_curve_test_suite.hpp:58
void to_cubic_test()
Definition: piecewise_curve_test_suite.hpp:1235
void rotate(const rotation_matrix_type &rmat)
Definition: piecewise.hpp:471
void bounding_box_test()
Definition: piecewise_curve_test_suite.hpp:306
Definition: piecewise.hpp:281
tol__ tolerance_type
Definition: piecewise.hpp:278
error_code push_back(const curve_type &curve, const data_type &dt=1.0)
Definition: piecewise.hpp:688
data__ data_type
Definition: piecewise.hpp:276
void creation_test()
Definition: piecewise_curve_test_suite.hpp:199
data_type get_parameter_min() const
Definition: piecewise.hpp:366
curve_type::index_type index_type
Definition: piecewise.hpp:271
piecewise_curve_type::index_type index_type
Definition: piecewise_curve_test_suite.hpp:39
void length_test()
Definition: piecewise_curve_test_suite.hpp:1647
index_type number_segments() const
Definition: piecewise.hpp:419
void AddTests(const float &)
Definition: piecewise_curve_test_suite.hpp:43
piecewise_curve_test_suite()
Definition: piecewise_curve_test_suite.hpp:90
bool closed() const
Definition: piecewise.hpp:501
Definition: piecewise.hpp:244
void get_bounding_box(bounding_box_type &bb) const
Definition: piecewise.hpp:456
error_code push_front(const curve_type &curve, const data_type &dt=1.0)
Definition: piecewise.hpp:646
piecewise_curve_type::point_type point_type
Definition: piecewise_curve_test_suite.hpp:37
eli::geom::curve::piecewise< eli::geom::curve::bezier, data__, 3 > piecewise_curve_type
Definition: piecewise_curve_test_suite.hpp:35
point_type fpp(const data_type &t) const
Definition: piecewise.hpp:1765
Definition: piecewise.hpp:286
point_type fppp(const data_type &t) const
Definition: piecewise.hpp:1782
void split_test()
Definition: piecewise_curve_test_suite.hpp:989
curve__< data__, dim__, tol__ > curve_type
Definition: piecewise.hpp:270
void translate(const point_type &trans)
Definition: piecewise.hpp:491
error_code
Definition: piecewise.hpp:279
void length(typename piecewise< curve__, data__, dim__, tol__ >::data_type &len, const piecewise< curve__, data__, dim__, tol__ > &pc, const typename piecewise< curve__, data__, dim__, tol__ >::data_type &tol)
Definition: length.hpp:43
error_code set(it__ itb, it__ ite)
Definition: piecewise.hpp:602
error_code replace(const curve_type &curve, const index_type &index)
Definition: piecewise.hpp:796
void round_test()
Definition: piecewise_curve_test_suite.hpp:1726
void reverse_test()
Definition: piecewise_curve_test_suite.hpp:362
curve_type::rotation_matrix_type rotation_matrix_type
Definition: piecewise.hpp:274
Definition: piecewise.hpp:282
void reverse()
Definition: piecewise.hpp:519
piecewise_curve_type::tolerance_type tolerance_type
Definition: piecewise_curve_test_suite.hpp:40
void octave_print(int figno, const piecewise_curve_type &pc)
Definition: piecewise_curve_test_suite.hpp:99
void clear()
Definition: piecewise.hpp:599
void continuity_test()
Definition: piecewise_curve_test_suite.hpp:1820
data_type get_parameter_max() const
Definition: piecewise.hpp:374
point_type fp(const data_type &t) const
Definition: piecewise.hpp:1748
piecewise_curve_type::curve_type curve_type
Definition: piecewise_curve_test_suite.hpp:36
data_type get_t0() const
Definition: piecewise.hpp:335
void transformation_test()
Definition: piecewise_curve_test_suite.hpp:785
void round(const data_type &rad)
Definition: piecewise.hpp:1174
point_type f(const data_type &t) const
Definition: piecewise.hpp:1732
void replace_test()
Definition: piecewise_curve_test_suite.hpp:420
void set_t0(const data_type &t0_in)
Definition: piecewise.hpp:340
void degree(index_type &mind, index_type &maxd) const
Definition: piecewise.hpp:421
error_code split(const data_type &t)
Definition: piecewise.hpp:1055
~piecewise_curve_test_suite()
Definition: piecewise_curve_test_suite.hpp:94
void AddTests(const long double &)
Definition: piecewise_curve_test_suite.hpp:73
Definition: piecewise_curve_test_suite.hpp:32
piecewise_curve_type::data_type data_type
Definition: piecewise_curve_test_suite.hpp:38
void evaluation_test()
Definition: piecewise_curve_test_suite.hpp:868
error_code get(curve_type &curve, const index_type &index) const
Definition: piecewise.hpp:729
curve_type::point_type point_type
Definition: piecewise.hpp:272
void find_discontinuities(eli::geom::general::continuity cont, std::vector< data_type > &tdisc) const
Definition: piecewise.hpp:1676
void to_cubic(const data_type &ttol)
Definition: piecewise.hpp:1167