13 #ifndef minimum_distance_curve_test_suite_hpp
14 #define minimum_distance_curve_test_suite_hpp
24 template<
typename data__>
85 void octave_print(
int figno,
const std::vector<point_type2> &pts,
const curve_type2 &c)
const
89 std::cout <<
"figure(" << figno <<
");" << std::endl;
90 std::cout <<
"xpts=[" << pts[0].x();
91 for (i=1; i<pts.size(); ++i)
92 std::cout <<
", " << pts[i].x();
93 std::cout <<
"];" << std::endl;
94 std::cout <<
"ypts=[" << pts[0].y();
95 for (i=1; i<pts.size(); ++i)
96 std::cout <<
", " << pts[i].y();
97 std::cout <<
"];" << std::endl;
99 std::vector<data__> t(101);
100 for (i=0; i<t.size(); ++i)
101 t[i]=static_cast<data__>(i)/(t.size()-1);
103 std::cout <<
"xint=[" << c.
f(t[0])(0);
104 for (i=1; i<t.size(); ++i)
105 std::cout <<
", " << c.
f(t[i])(0);
106 std::cout <<
"];" << std::endl;
107 std::cout <<
"yint=[" << c.
f(t[0])(1);
108 for (i=1; i<t.size(); ++i)
109 std::cout <<
", " << c.
f(t[i])(1);
110 std::cout <<
"];" << std::endl;
112 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
113 std::cout <<
"plot(xpts, ypts, 'bo', xint, yint, 'k-');" << std::endl;
115 std::cout <<
"figure(" << figno+1 <<
");" << std::endl;
116 std::cout <<
"t=[" << t[0];
117 for (i=1; i<t.size(); ++i)
118 std::cout <<
", " << t[i];
119 std::cout <<
"];" << std::endl;
120 std::cout <<
"g=[" << (c.
f(t[0])-pts[0]).dot(c.
fp(t[0]));
121 for (i=1; i<t.size(); ++i)
122 std::cout <<
", " << (c.
f(t[i])-pts[0]).dot(c.
fp(t[i]));
123 std::cout <<
"];" << std::endl;
125 std::cout <<
"plot([0,1], [0, 0], 'k-', t, g, 'k-');" << std::endl;
128 void octave_print(
int figno,
const std::vector<point_type3> &pts,
const curve_type3 &c)
const
132 std::cout << std::endl;
133 std::cout <<
"figure(" << figno <<
");" << std::endl;
134 std::cout <<
"xpts=[" << pts[0].x();
135 for (i=1; i<pts.size(); ++i)
136 std::cout <<
", " << pts[i].x();
137 std::cout <<
"];" << std::endl;
138 std::cout <<
"ypts=[" << pts[0].y();
139 for (i=1; i<pts.size(); ++i)
140 std::cout <<
", " << pts[i].y();
141 std::cout <<
"];" << std::endl;
142 std::cout <<
"zpts=[" << pts[0].z();
143 for (i=1; i<pts.size(); ++i)
144 std::cout <<
", " << pts[i].z();
145 std::cout <<
"];" << std::endl;
147 std::vector<data__> t(101);
148 for (i=0; i<t.size(); ++i)
149 t[i]=static_cast<data__>(i)/(t.size()-1);
151 std::cout <<
"xint=[" << c.f(t[0]).x();
152 for (i=1; i<t.size(); ++i)
153 std::cout <<
", " << c.f(t[i]).x();
154 std::cout <<
"];" << std::endl;
155 std::cout <<
"yint=[" << c.f(t[0]).y();
156 for (i=1; i<t.size(); ++i)
157 std::cout <<
", " << c.f(t[i]).y();
158 std::cout <<
"];" << std::endl;
159 std::cout <<
"zint=[" << c.f(t[0]).z();
160 for (i=1; i<t.size(); ++i)
161 std::cout <<
", " << c.f(t[i]).z();
162 std::cout <<
"];" << std::endl;
164 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
165 std::cout <<
"plot3(xpts, ypts, zpts, 'bo', xint, yint, zint, 'k-');" << std::endl;
166 std::cout <<
"axis equal" << std::endl;
168 std::cout <<
"figure(" << figno+1 <<
");" << std::endl;
169 std::cout <<
"t=[" << t[0];
170 for (i=1; i<t.size(); ++i)
171 std::cout <<
", " << t[i];
172 std::cout <<
"];" << std::endl;
173 std::cout <<
"g=[" << (c.f(t[0])-pts[0]).dot(c.fp(t[0]));
174 for (i=1; i<t.size(); ++i)
175 std::cout <<
", " << (c.f(t[i])-pts[0]).dot(c.fp(t[i]));
176 std::cout <<
"];" << std::endl;
178 std::cout <<
"plot([0,1], [0, 0], 'k-', t, g, 'k-');" << std::endl << std::endl;
183 point_type2 cntrl_in[4];
192 point_type2 pt, norm;
193 data_type dist, t, dist_ref, t_ref;
196 for (index_type2 i=0; i<4; ++i)
204 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
206 pt=c.
f(t_ref)+dist_ref*norm;
208 TEST_ASSERT(tol.approximately_equal(t, t_ref));
209 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
212 dist_ref=
static_cast<data_type
>(0.01);
214 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
216 pt=c.
f(t_ref)+dist_ref*norm;
218 TEST_ASSERT(tol.approximately_equal(t, t_ref));
219 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
222 dist_ref=
static_cast<data_type
>(0.1);
224 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
226 pt=c.
f(t_ref)+dist_ref*norm;
228 TEST_ASSERT(tol.approximately_equal(t, t_ref));
229 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
232 dist_ref=
static_cast<data_type
>(1.5);
234 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
236 pt=c.
f(t_ref)+dist_ref*norm;
238 TEST_ASSERT(tol.approximately_equal(t, t_ref));
239 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
243 t_ref=
static_cast<data_type
>(0.6);
244 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
246 pt=c.
f(t_ref)+dist_ref*norm;
248 TEST_ASSERT(tol.approximately_equal(t, t_ref));
249 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
252 dist_ref=
static_cast<data_type
>(0.1);
253 t_ref=
static_cast<data_type
>(0.65);
254 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
256 pt=c.
f(t_ref)+dist_ref*norm;
258 TEST_ASSERT(tol.approximately_equal(t, t_ref));
259 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
262 dist_ref=
static_cast<data_type
>(0.1);
263 t_ref=
static_cast<data_type
>(0.01);
264 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
266 pt=c.
f(t_ref)+dist_ref*norm;
268 TEST_ASSERT(tol.approximately_equal(t, t_ref));
269 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
272 dist_ref=
static_cast<data_type
>(0.1);
273 t_ref=
static_cast<data_type
>(0.001);
274 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
276 pt=c.
f(t_ref)+dist_ref*norm;
278 TEST_ASSERT(tol.approximately_equal(t, t_ref));
279 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
282 dist_ref=
static_cast<data_type
>(0.1);
283 t_ref=
static_cast<data_type
>(0.999);
284 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
286 pt=c.
f(t_ref)+dist_ref*norm;
288 TEST_ASSERT(tol.approximately_equal(t, t_ref));
289 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
292 t_ref=
static_cast<data_type
>(0);
294 dist_ref=(cntrl_in[0]-pt).norm();
296 TEST_ASSERT(tol.approximately_equal(t, t_ref));
297 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
300 t_ref=
static_cast<data_type
>(1);
302 dist_ref=(cntrl_in[3]-pt).norm();
304 TEST_ASSERT(tol.approximately_equal(t, t_ref));
305 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
310 point_type2 cntrl_in[13];
314 cntrl_in[1] << 1, 0.5;
315 cntrl_in[2] << 0.5, 1;
317 cntrl_in[4] <<-0.5, 1;
318 cntrl_in[5] << -1, 0.5;
319 cntrl_in[6] << -1, 0;
320 cntrl_in[7] << -1,-0.5;
321 cntrl_in[8] <<-0.5,-1;
323 cntrl_in[10] << 0.5,-1;
324 cntrl_in[11] << 1,-0.5;
328 point_type2 pt, norm;
329 data_type dist, t, dist_ref, t_ref;
332 for (index_type2 i=0; i<13; ++i)
340 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
342 pt=c.
f(t_ref)+dist_ref*norm;
344 TEST_ASSERT(tol.approximately_equal(t, t_ref));
345 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
348 dist_ref=
static_cast<data_type
>(0.1);
350 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
352 pt=c.
f(t_ref)+dist_ref*norm;
354 TEST_ASSERT(tol.approximately_equal(t, t_ref));
355 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
358 dist_ref=
static_cast<data_type
>(0.77);
360 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
362 pt=c.
f(t_ref)+dist_ref*norm;
364 TEST_ASSERT(tol.approximately_equal(t, t_ref));
365 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
368 dist_ref=
static_cast<data_type
>(0.1);
369 t_ref=
static_cast<data_type
>(0.7);
370 norm << c.
fp(t_ref).y(), -c.
fp(t_ref).x();
372 pt=c.
f(t_ref)+dist_ref*norm;
374 TEST_ASSERT(tol.approximately_equal(t, t_ref));
375 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
379 t_ref=
static_cast<data_type
>(0.7);
380 norm << c.
fp(t_ref).y(), -c.
fp(t_ref).x();
382 pt=c.
f(t_ref)+dist_ref*norm;
384 TEST_ASSERT(tol.approximately_equal(t, t_ref));
385 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
388 dist_ref=
static_cast<data_type
>(0.1);
389 t_ref=
static_cast<data_type
>(0.999);
390 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
392 pt=c.
f(t_ref)+dist_ref*norm;
394 TEST_ASSERT(tol.approximately_equal(t, t_ref));
395 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
398 dist_ref=
static_cast<data_type
>(0.1);
399 t_ref=
static_cast<data_type
>(0.999);
400 norm << c.
fp(t_ref).y(), -c.
fp(t_ref).x();
402 pt=c.
f(t_ref)+dist_ref*norm;
404 TEST_ASSERT(tol.approximately_equal(t, t_ref));
405 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
408 dist_ref=
static_cast<data_type
>(0.1);
409 t_ref=
static_cast<data_type
>(0.001);
410 norm << -c.
fp(t_ref).y(), c.
fp(t_ref).x();
412 pt=c.
f(t_ref)+dist_ref*norm;
414 TEST_ASSERT(tol.approximately_equal(t, t_ref));
415 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
418 dist_ref=
static_cast<data_type
>(0.1);
419 t_ref=
static_cast<data_type
>(0.001);
420 norm << c.
fp(t_ref).y(), -c.
fp(t_ref).x();
422 pt=c.
f(t_ref)+dist_ref*norm;
424 TEST_ASSERT(tol.approximately_equal(t, t_ref));
425 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
429 t_ref=
static_cast<data_type
>(0.001);
430 norm << c.
fp(t_ref).y(), -c.
fp(t_ref).x();
432 pt=c.
f(t_ref)+dist_ref*norm;
434 TEST_ASSERT(tol.approximately_equal(t, t_ref));
435 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
440 point_type3 cntrl_in[4];
443 cntrl_in[0] <<-1, 2, 1;
444 cntrl_in[1] << 0, 1, 0;
445 cntrl_in[2] << 3, 0, 1;
446 cntrl_in[3] << 4, 1, 2;
449 point_type3 pt, fp, norm;
450 data_type dist, t, dist_ref, t_ref, t_guess;
453 for (index_type2 i=0; i<4; ++i)
455 c.set_control_point(cntrl_in[i], i);
462 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
464 pt=c.f(t_ref)+dist_ref*norm;
468 TEST_ASSERT(tol.approximately_equal(t, t_ref));
469 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
471 t_guess=t_ref+
static_cast<data_type
>(0.2);
473 TEST_ASSERT(tol.approximately_equal(t, t_ref));
474 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
476 t_guess=t_ref-
static_cast<data_type
>(0.2);
478 TEST_ASSERT(tol.approximately_equal(t, t_ref));
479 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
483 TEST_ASSERT(tol.approximately_equal(t, t_ref));
484 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
493 TEST_ASSERT(tol.approximately_equal(t, t_ref));
494 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
497 dist_ref=
static_cast<data_type
>(0.01);
500 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
502 pt=c.f(t_ref)+dist_ref*norm;
506 TEST_ASSERT(tol.approximately_equal(t, t_ref));
507 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
509 t_guess=t_ref+
static_cast<data_type
>(0.2);
511 TEST_ASSERT(tol.approximately_equal(t, t_ref));
512 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
514 t_guess=t_ref-
static_cast<data_type
>(0.2);
516 TEST_ASSERT(tol.approximately_equal(t, t_ref));
517 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
521 TEST_ASSERT(tol.approximately_equal(t, t_ref));
522 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
531 TEST_ASSERT(tol.approximately_equal(t, t_ref));
532 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
535 dist_ref=
static_cast<data_type
>(0.1);
538 norm << fp.z(),-fp.z(), -fp.x()+fp.y();
540 pt=c.f(t_ref)+dist_ref*norm;
544 TEST_ASSERT(tol.approximately_equal(t, t_ref));
545 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
547 t_guess=t_ref+
static_cast<data_type
>(0.2);
549 TEST_ASSERT(tol.approximately_equal(t, t_ref));
550 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
552 t_guess=t_ref-
static_cast<data_type
>(0.2);
554 TEST_ASSERT(tol.approximately_equal(t, t_ref));
555 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
559 TEST_ASSERT(tol.approximately_equal(t, t_ref));
560 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
569 TEST_ASSERT(tol.approximately_equal(t, t_ref));
570 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
573 dist_ref=
static_cast<data_type
>(1.5);
576 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
578 pt=c.f(t_ref)+dist_ref*norm;
582 TEST_ASSERT(tol.approximately_equal(t, t_ref));
583 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
585 t_guess=t_ref+
static_cast<data_type
>(0.2);
587 TEST_ASSERT(tol.approximately_equal(t, t_ref));
588 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
590 t_guess=t_ref-
static_cast<data_type
>(0.2);
592 TEST_ASSERT(tol.approximately_equal(t, t_ref));
593 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
597 TEST_ASSERT(tol.approximately_equal(t, t_ref));
598 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
607 TEST_ASSERT(tol.approximately_equal(t, t_ref));
608 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
612 t_ref=
static_cast<data_type
>(0.6);
614 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
616 pt=c.f(t_ref)+dist_ref*norm;
620 TEST_ASSERT(tol.approximately_equal(t, t_ref));
621 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
623 t_guess=t_ref+
static_cast<data_type
>(0.2);
625 TEST_ASSERT(tol.approximately_equal(t, t_ref));
626 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
628 t_guess=t_ref-
static_cast<data_type
>(0.2);
630 TEST_ASSERT(tol.approximately_equal(t, t_ref));
631 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
646 TEST_ASSERT(tol.approximately_equal(t, t_ref));
647 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
650 dist_ref=
static_cast<data_type
>(0.1);
651 t_ref=
static_cast<data_type
>(0.65);
653 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
655 pt=c.f(t_ref)+dist_ref*norm;
659 TEST_ASSERT(tol.approximately_equal(t, t_ref));
660 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
662 t_guess=t_ref+
static_cast<data_type
>(0.2);
664 TEST_ASSERT(tol.approximately_equal(t, t_ref));
665 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
667 t_guess=t_ref-
static_cast<data_type
>(0.2);
669 TEST_ASSERT(tol.approximately_equal(t, t_ref));
670 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
680 TEST_ASSERT(tol.approximately_equal(t, t_ref));
681 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
684 TEST_ASSERT(tol.approximately_equal(t, t_ref));
685 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
688 dist_ref=
static_cast<data_type
>(0.1);
689 t_ref=
static_cast<data_type
>(0.01);
691 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
693 pt=c.f(t_ref)+dist_ref*norm;
697 TEST_ASSERT(tol.approximately_equal(t, t_ref));
698 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
700 t_guess=t_ref+
static_cast<data_type
>(0.2);
702 TEST_ASSERT(tol.approximately_equal(t, t_ref));
703 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
705 t_guess=t_ref-t_ref/2;
707 TEST_ASSERT(tol.approximately_equal(t, t_ref));
708 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
712 TEST_ASSERT(tol.approximately_equal(t, t_ref));
713 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
722 TEST_ASSERT(tol.approximately_equal(t, t_ref));
723 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
726 dist_ref=
static_cast<data_type
>(0.1);
727 t_ref=
static_cast<data_type
>(0.001);
729 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
731 pt=c.f(t_ref)+dist_ref*norm;
735 TEST_ASSERT(tol.approximately_equal(t, t_ref));
736 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
738 t_guess=t_ref+
static_cast<data_type
>(0.2);
740 TEST_ASSERT(tol.approximately_equal(t, t_ref));
741 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
743 t_guess=t_ref-t_ref/2;
745 TEST_ASSERT(tol.approximately_equal(t, t_ref));
746 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
750 TEST_ASSERT(tol.approximately_equal(t, t_ref));
751 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
760 TEST_ASSERT(tol.approximately_equal(t, t_ref));
761 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
764 dist_ref=
static_cast<data_type
>(0.1);
765 t_ref=
static_cast<data_type
>(0.999);
767 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
769 pt=c.f(t_ref)+dist_ref*norm;
773 TEST_ASSERT(tol.approximately_equal(t, t_ref));
774 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
776 t_guess=t_ref+(1-t_ref)/2;
778 TEST_ASSERT(tol.approximately_equal(t, t_ref));
779 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
781 t_guess=t_ref-
static_cast<data_type
>(0.2);
783 TEST_ASSERT(tol.approximately_equal(t, t_ref));
784 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
794 TEST_ASSERT(tol.approximately_equal(t, t_ref));
795 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
798 TEST_ASSERT(tol.approximately_equal(t, t_ref));
799 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
802 t_ref=
static_cast<data_type
>(0);
804 dist_ref=(cntrl_in[0]-pt).norm();
808 TEST_ASSERT(tol.approximately_equal(t, t_ref));
809 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
819 TEST_ASSERT(tol.approximately_equal(t, t_ref));
820 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
829 TEST_ASSERT(tol.approximately_equal(t, t_ref));
830 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
833 t_ref=
static_cast<data_type
>(1);
835 dist_ref=(cntrl_in[3]-pt).norm();
839 TEST_ASSERT(tol.approximately_equal(t, t_ref));
840 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
856 TEST_ASSERT(tol.approximately_equal(t, t_ref));
857 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
860 TEST_ASSERT(tol.approximately_equal(t, t_ref));
861 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
866 point_type3 cntrl_in[13];
869 cntrl_in[0] << 1, 0, 0;
870 cntrl_in[1] << 1, 0.5,-0.5;
871 cntrl_in[2] << 0.5, 1, -0.5;
872 cntrl_in[3] << 0, 1, 0;
873 cntrl_in[4] <<-0.5, 1, 0;
874 cntrl_in[5] << -1, 0.5, 0.5;
875 cntrl_in[6] << -1, 0, 0.5;
876 cntrl_in[7] << -1,-0.5, 0;
877 cntrl_in[8] <<-0.5,-1, -0.5;
878 cntrl_in[9] << 0,-1, 0;
879 cntrl_in[10] << 0.5,-1, 0.5;
880 cntrl_in[11] << 1,-0.5, 0.5;
881 cntrl_in[12] << 1,0, 0;
884 point_type3 pt, norm, fp;
885 data_type dist, t, dist_ref, t_ref, t_guess;
888 for (index_type3 i=0; i<13; ++i)
890 c.set_control_point(cntrl_in[i], i);
897 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
899 pt=c.f(t_ref)+dist_ref*norm;
903 TEST_ASSERT(tol.approximately_equal(t, t_ref));
904 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
906 t_guess=t_ref+
static_cast<data_type
>(0.2);
908 TEST_ASSERT(tol.approximately_equal(t, t_ref));
909 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
919 TEST_ASSERT(tol.approximately_equal(t, t_ref));
920 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
924 TEST_ASSERT(tol.approximately_equal(t, t_ref));
925 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
928 TEST_ASSERT(tol.approximately_equal(t, t_ref));
929 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
932 dist_ref=
static_cast<data_type
>(0.1);
935 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
937 pt=c.f(t_ref)+dist_ref*norm;
941 TEST_ASSERT(tol.approximately_equal(t, t_ref));
942 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
944 t_guess=t_ref+
static_cast<data_type
>(0.2);
946 TEST_ASSERT(tol.approximately_equal(t, t_ref));
947 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
949 t_guess=t_ref-
static_cast<data_type
>(0.2);
951 TEST_ASSERT(tol.approximately_equal(t, t_ref));
952 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
962 TEST_ASSERT(tol.approximately_equal(t, t_ref));
963 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
966 TEST_ASSERT(tol.approximately_equal(t, t_ref));
967 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
970 dist_ref=
static_cast<data_type
>(0.77);
973 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
975 pt=c.f(t_ref)+dist_ref*norm;
979 TEST_ASSERT(tol.approximately_equal(t, t_ref));
980 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
982 t_guess=t_ref+
static_cast<data_type
>(0.2);
984 TEST_ASSERT(tol.approximately_equal(t, t_ref));
985 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1006 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1007 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1010 dist_ref=
static_cast<data_type
>(0.1);
1011 t_ref=
static_cast<data_type
>(0.7);
1013 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1015 pt=c.f(t_ref)+dist_ref*norm;
1019 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1020 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1022 t_guess=t_ref+
static_cast<data_type
>(0.2);
1024 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1025 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1035 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1036 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1040 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1041 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1044 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1045 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1049 t_ref=
static_cast<data_type
>(0.7);
1051 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1053 pt=c.f(t_ref)+dist_ref*norm;
1057 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1058 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1085 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1086 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1089 dist_ref=
static_cast<data_type
>(0.1);
1090 t_ref=
static_cast<data_type
>(0.999);
1092 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1094 pt=c.f(t_ref)+dist_ref*norm;
1098 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1099 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1101 t_guess=t_ref+(1-t_ref)/2;
1103 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1104 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1114 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1115 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1119 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1120 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1123 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1124 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1127 dist_ref=
static_cast<data_type
>(0.1);
1128 t_ref=
static_cast<data_type
>(0.999);
1130 norm << -fp.z(), fp.z(), fp.x()-fp.y();
1132 pt=c.f(t_ref)+dist_ref*norm;
1136 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1137 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1139 t_guess=t_ref+(1-t_ref)/2;
1141 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1142 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1152 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1153 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1157 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1158 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1161 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1162 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1165 dist_ref=
static_cast<data_type
>(0.1);
1166 t_ref=
static_cast<data_type
>(0.001);
1168 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1170 pt=c.f(t_ref)+dist_ref*norm;
1174 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1175 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1183 t_guess=t_ref-t_ref/2;
1185 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1186 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1190 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1191 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1195 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1196 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1199 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1200 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1203 dist_ref=
static_cast<data_type
>(0.1);
1204 t_ref=
static_cast<data_type
>(0.001);
1206 norm << -fp.z(), fp.z(), fp.x()-fp.y();
1208 pt=c.f(t_ref)+dist_ref*norm;
1212 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1213 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1221 t_guess=t_ref-t_ref/2;
1223 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1224 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1228 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1229 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1233 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1234 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1237 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1238 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1242 t_ref=
static_cast<data_type
>(0.001);
1244 norm << -fp.z(), fp.z(), fp.x()-fp.y();
1246 pt=c.f(t_ref)+dist_ref*norm;
1250 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1251 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1253 t_guess=t_ref+
static_cast<data_type
>(0.2);
1255 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1256 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1258 t_guess=t_ref-t_ref/2;
1260 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1261 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1265 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1266 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1270 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1271 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1274 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1275 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1290 point_type3 cntrl_in[4];
1293 cntrl_in[0] <<-1, 2, 1;
1294 cntrl_in[1] << 0, 1, 0;
1295 cntrl_in[2] << 3, 0, 1;
1296 cntrl_in[3] << 4, 1, 2;
1298 piecewise_curve_type3 pwc, pwcsave;
1300 point_type3 pt, fp, norm;
1301 data_type dist, t, dist_ref, t_ref, t_guess, t_split;
1305 for (index_type2 i=0; i<4; ++i)
1307 c.set_control_point(cntrl_in[i], i);
1316 dist_ref=
static_cast<data_type
>(0.1);
1319 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1321 pt=pwc.
f(t_ref)+dist_ref*norm;
1325 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1326 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1328 t_guess=t_ref+
static_cast<data_type
>(0.2);
1330 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1331 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1333 t_guess=t_ref-
static_cast<data_type
>(0.2);
1335 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1336 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1340 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1341 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1350 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1351 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1358 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1359 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1361 t_guess=t_ref+
static_cast<data_type
>(0.2);
1363 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1364 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1366 t_guess=t_ref-
static_cast<data_type
>(0.2);
1368 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1369 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1373 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1374 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1376 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1378 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1379 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1381 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1383 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1384 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1388 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1389 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1398 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1399 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1401 t_split=t_ref-
static_cast<data_type
>(0.05);
1407 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1408 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1410 t_guess=t_ref+
static_cast<data_type
>(0.2);
1412 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1413 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1415 t_guess=t_ref-
static_cast<data_type
>(0.2);
1417 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1418 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1422 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1423 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1425 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1427 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1428 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1430 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1432 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1433 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1437 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1438 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1447 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1448 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1450 t_split=t_ref+
static_cast<data_type
>(0.05);
1456 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1457 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1459 t_guess=t_ref+
static_cast<data_type
>(0.2);
1461 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1462 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1464 t_guess=t_ref-
static_cast<data_type
>(0.2);
1466 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1467 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1471 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1472 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1474 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1476 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1477 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1479 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1481 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1482 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1486 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1487 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1496 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1497 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1501 pwc.
split(static_cast<data_type>(0.1));
1502 pwc.
split(static_cast<data_type>(0.2));
1503 pwc.
split(static_cast<data_type>(0.3));
1504 pwc.
split(static_cast<data_type>(0.4));
1505 pwc.
split(static_cast<data_type>(0.5));
1506 pwc.
split(static_cast<data_type>(0.6));
1507 pwc.
split(static_cast<data_type>(0.7));
1508 pwc.
split(static_cast<data_type>(0.8));
1509 pwc.
split(static_cast<data_type>(0.9));
1513 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1514 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1516 t_guess=t_ref+
static_cast<data_type
>(0.2);
1518 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1519 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1521 t_guess=t_ref-
static_cast<data_type
>(0.2);
1523 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1524 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1528 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1529 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1538 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1539 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1544 point_type3 cntrl_in[4];
1547 cntrl_in[0] <<-1, 2, 1;
1548 cntrl_in[1] << 0, 1, 0;
1549 cntrl_in[2] << 3, 0, 1;
1550 cntrl_in[3] << 4, 1, 2;
1552 piecewise_curve_type3 pwc, pwcsave;
1554 point_type3 pt, fp, norm;
1555 data_type dist, t, dist_ref, t_ref, t_guess, t_split, t0;
1559 for (index_type2 i=0; i<4; ++i)
1561 c.set_control_point(cntrl_in[i], i);
1569 t0=
static_cast<data_type
>(1.6);
1577 dist_ref=
static_cast<data_type
>(0.1);
1578 t_ref=
static_cast<data_type
>(0.25)+t0;
1580 norm << fp.z(), -fp.z(), -fp.x()+fp.y();
1582 pt=pwc.
f(t_ref)+dist_ref*norm;
1586 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1587 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1589 t_guess=t_ref+
static_cast<data_type
>(0.2);
1591 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1592 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1594 t_guess=t_ref-
static_cast<data_type
>(0.2);
1596 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1597 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1601 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1602 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1611 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1612 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1619 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1620 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1622 t_guess=t_ref+
static_cast<data_type
>(0.2);
1624 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1625 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1627 t_guess=t_ref-
static_cast<data_type
>(0.2);
1629 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1630 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1634 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1635 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1637 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1639 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1640 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1642 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1644 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1645 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1649 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1650 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1659 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1660 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1662 t_split=t_ref-
static_cast<data_type
>(0.05);
1668 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1669 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1671 t_guess=t_ref+
static_cast<data_type
>(0.2);
1673 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1674 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1676 t_guess=t_ref-
static_cast<data_type
>(0.2);
1678 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1679 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1683 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1684 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1686 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1688 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1689 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1691 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1693 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1694 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1698 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1699 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1708 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1709 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1711 t_split=t_ref+
static_cast<data_type
>(0.05);
1717 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1718 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1720 t_guess=t_ref+
static_cast<data_type
>(0.2);
1722 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1723 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1725 t_guess=t_ref-
static_cast<data_type
>(0.2);
1727 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1728 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1732 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1733 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1735 t_guess=t_split+std::numeric_limits<data_type>::epsilon();
1737 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1738 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1740 t_guess=t_split-std::numeric_limits<data_type>::epsilon();
1742 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1743 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1747 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1748 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1757 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1758 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1762 pwc.
split(static_cast<data_type>(0.1)+t0);
1763 pwc.
split(static_cast<data_type>(0.2)+t0);
1764 pwc.
split(static_cast<data_type>(0.3)+t0);
1765 pwc.
split(static_cast<data_type>(0.4)+t0);
1766 pwc.
split(static_cast<data_type>(0.5)+t0);
1767 pwc.
split(static_cast<data_type>(0.6)+t0);
1768 pwc.
split(static_cast<data_type>(0.7)+t0);
1769 pwc.
split(static_cast<data_type>(0.8)+t0);
1770 pwc.
split(static_cast<data_type>(0.9)+t0);
1774 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1775 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1777 t_guess=t_ref+
static_cast<data_type
>(0.2);
1779 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1780 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1782 t_guess=t_ref-
static_cast<data_type
>(0.2);
1784 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1785 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1789 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1790 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1799 TEST_ASSERT(tol.approximately_equal(t, t_ref));
1800 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
void AddTests(const long double &)
Definition: minimum_distance_curve_test_suite.hpp:64
~minimum_distance_curve_test_suite()
Definition: minimum_distance_curve_test_suite.hpp:80
curve::piecewise< curve1__, data1__, dim1__, tol1__ >::data_type minimum_distance(typename curve::piecewise< curve1__, data1__, dim1__, tol1__ >::data_type &t, const curve::piecewise< curve1__, data1__, dim1__, tol1__ > &pc, const typename curve::piecewise< curve1__, data1__, dim1__, tol1__ >::point_type &pt)
minimum_distance_curve_test_suite()
Definition: minimum_distance_curve_test_suite.hpp:76
curve_type2::tolerance_type tolerance_type
Definition: minimum_distance_curve_test_suite.hpp:39
Eigen::Matrix< data_type, 1, dim__ > point_type
Definition: bezier.hpp:114
Definition: piecewise.hpp:281
point_type f(const data_type &t) const
Definition: bezier.hpp:324
error_code push_back(const curve_type &curve, const data_type &dt=1.0)
Definition: piecewise.hpp:688
tol__ tolerance_type
Definition: bezier.hpp:118
void AddTests(const double &)
Definition: minimum_distance_curve_test_suite.hpp:54
Definition: minimum_distance_curve_test_suite.hpp:25
void point_piecewise_01_smooth_3d_test()
Definition: minimum_distance_curve_test_suite.hpp:1288
Definition: piecewise.hpp:244
void point_smooth_2d_test()
Definition: minimum_distance_curve_test_suite.hpp:181
data__ data_type
Definition: minimum_distance_curve_test_suite.hpp:28
curve__< data__, dim__, tol__ > curve_type
Definition: piecewise.hpp:270
void point_closed_2d_test()
Definition: minimum_distance_curve_test_suite.hpp:308
error_code
Definition: piecewise.hpp:279
eli::geom::curve::bezier< data_type, 2 > curve_type2
Definition: minimum_distance_curve_test_suite.hpp:30
void point_smooth_3d_test()
Definition: minimum_distance_curve_test_suite.hpp:438
void point_piecewise_trange_smooth_3d_test()
Definition: minimum_distance_curve_test_suite.hpp:1542
void AddTests(const float &)
Definition: minimum_distance_curve_test_suite.hpp:44
void octave_print(int figno, const std::vector< point_type2 > &pts, const curve_type2 &c) const
Definition: minimum_distance_curve_test_suite.hpp:85
curve_type2::point_type point_type2
Definition: minimum_distance_curve_test_suite.hpp:31
point_type fp(const data_type &t) const
Definition: piecewise.hpp:1748
void set_control_point(const control_point_type &cp, const index_type &i)
Definition: bezier.hpp:201
eli::geom::curve::piecewise< eli::geom::curve::bezier, data__, 3 > piecewise_curve_type3
Definition: minimum_distance_curve_test_suite.hpp:34
curve_type3::point_type point_type3
Definition: minimum_distance_curve_test_suite.hpp:36
point_type f(const data_type &t) const
Definition: piecewise.hpp:1732
curve_type3::index_type index_type3
Definition: minimum_distance_curve_test_suite.hpp:37
void set_t0(const data_type &t0_in)
Definition: piecewise.hpp:340
error_code split(const data_type &t)
Definition: piecewise.hpp:1055
point_type fp(const data_type &t) const
Definition: bezier.hpp:344
Definition: bezier.hpp:109
curve_type2::index_type index_type2
Definition: minimum_distance_curve_test_suite.hpp:32
piecewise_curve_type3::curve_type curve_type3
Definition: minimum_distance_curve_test_suite.hpp:35
void point_closed_3d_test()
Definition: minimum_distance_curve_test_suite.hpp:864
tolerance_type tol
Definition: minimum_distance_curve_test_suite.hpp:41
point_type::Index index_type
Definition: bezier.hpp:116
void octave_print(int figno, const std::vector< point_type3 > &pts, const curve_type3 &c) const
Definition: minimum_distance_curve_test_suite.hpp:128