13 #ifndef minimum_distance_surface_test_suite_hpp
14 #define minimum_distance_surface_test_suite_hpp
24 template<
typename data__>
74 void octave_print(
int figno,
const std::vector<point_type> &pts,
const surface_type &s)
const
78 std::cout <<
"figure(" << figno <<
");" << std::endl;
79 std::cout <<
"xpts=[" << pts[0].x();
80 for (i=1; i<pts.size(); ++i)
81 std::cout <<
", " << pts[i].x();
82 std::cout <<
"];" << std::endl;
83 std::cout <<
"ypts=[" << pts[0].y();
84 for (i=1; i<pts.size(); ++i)
85 std::cout <<
", " << pts[i].y();
86 std::cout <<
"];" << std::endl;
87 std::cout <<
"zpts=[" << pts[0].z();
88 for (i=1; i<pts.size(); ++i)
89 std::cout <<
", " << pts[i].z();
90 std::cout <<
"];" << std::endl;
93 std::vector<data__> u(51), v(51);
94 for (i=0; i<u.size(); ++i)
96 u[i]=
static_cast<data__
>(i)/(u.size()-1);
98 for (j=0; j<v.size(); ++j)
100 v[j]=
static_cast<data__
>(j)/(v.size()-1);
104 std::cout <<
"surf_x=[";
105 for (i=0; i<u.size(); ++i)
107 std::cout << s.f(u[i], v[0]).x();
108 for (j=1; j<(v.size()-1); ++j)
110 std::cout <<
", " << s.f(u[i], v[j]).x();
113 std::cout <<
", " << s.f(u[i], v[j]).x();
115 std::cout <<
"; " << std::endl;
117 std::cout <<
"];" << std::endl;
119 std::cout <<
"surf_y=[";
120 for (i=0; i<u.size(); ++i)
122 std::cout << s.f(u[i], v[0]).y();
123 for (j=1; j<(v.size()-1); ++j)
125 std::cout <<
", " << s.f(u[i], v[j]).y();
128 std::cout <<
", " << s.f(u[i], v[j]).y();
130 std::cout <<
"; " << std::endl;
132 std::cout <<
"];" << std::endl;
134 std::cout <<
"surf_z=[";
135 for (i=0; i<u.size(); ++i)
137 std::cout << s.f(u[i], v[0]).z();
138 for (j=1; j<(v.size()-1); ++j)
140 std::cout <<
", " << s.f(u[i], v[j]).z();
143 std::cout <<
", " << s.f(u[i], v[j]).z();
145 std::cout <<
"; " << std::endl;
147 std::cout <<
"];" << std::endl;
149 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
150 std::cout <<
"mesh(surf_x, surf_y, surf_z, zeros(size(surf_z)), 'EdgeColor', [0 0 0]);" << std::endl;
151 std::cout <<
"hold on;" << std::endl;
152 std::cout <<
"plot3(xpts, ypts, zpts, 'or', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r');" << std::endl;
153 std::cout <<
"hold off;" << std::endl;
154 std::cout <<
"axis equal" << std::endl;
156 std::cout <<
"figure(" << figno+1 <<
");" << std::endl;
157 std::cout <<
"u=[" << u[0];
158 for (i=1; i<u.size(); ++i)
159 std::cout <<
", " << u[i];
160 std::cout <<
"];" << std::endl;
161 std::cout <<
"v=[" << v[0];
162 for (i=1; i<v.size(); ++i)
163 std::cout <<
", " << v[i];
164 std::cout <<
"];" << std::endl;
165 std::cout <<
"g_u=[";
166 for (i=0; i<u.size(); ++i)
169 std::cout << (s.f(u[i], v[j])-pts[0]).dot(s.f_u(u[i], v[j]));
170 for (j=1; j<(v.size()-1); ++j)
172 std::cout <<
", " << (s.f(u[i], v[j])-pts[0]).dot(s.f_u(u[i], v[j]));
175 std::cout <<
", " << (s.f(u[i], v[j])-pts[0]).dot(s.f_u(u[i], v[j]));
177 std::cout <<
"; " << std::endl;
179 std::cout <<
"];" << std::endl;
180 std::cout <<
"g_v=[";
181 for (i=0; i<u.size(); ++i)
184 std::cout << (s.f(u[i], v[j])-pts[0]).dot(s.f_v(u[i], v[j]));
185 for (j=1; j<(v.size()-1); ++j)
187 std::cout <<
", " << (s.f(u[i], v[j])-pts[0]).dot(s.f_v(u[i], v[j]));
190 std::cout <<
", " << (s.f(u[i], v[j])-pts[0]).dot(s.f_v(u[i], v[j]));
192 std::cout <<
"; " << std::endl;
194 std::cout <<
"];" << std::endl;
196 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
197 std::cout <<
"mesh(u, v, g_u, zeros(length(u), length(v)), 'EdgeColor', [0 0 0]);" << std::endl;
198 std::cout <<
"hold on;" << std::endl;
199 std::cout <<
"mesh(u, v, g_v, zeros(length(u), length(v)), 'EdgeColor', [0 0 0]);" << std::endl;
200 std::cout <<
"surf(u, v, zeros(length(u), length(v)));" << std::endl;
201 std::cout <<
"hold off;" << std::endl;
206 const index_type n(3), m(3);
207 surface_type s(n, m);
208 point_type cp[3+1][3+1], pt_out;
209 point_type pt, norm, u_contra, v_contra;
210 data_type dist, u, v, dist_ref, u_ref, v_ref;
211 data_type u_off(static_cast<data_type>(0.2)), v_off(static_cast<data_type>(0.2));
215 cp[0][0] << -15, 0, 15;
216 cp[1][0] << -5, 5, 15;
217 cp[2][0] << 5, 5, 15;
218 cp[3][0] << 15, 0, 15;
219 cp[0][1] << -15, 5, 5;
220 cp[1][1] << -5, 5, 5;
222 cp[3][1] << 15, 5, 5;
223 cp[0][2] << -15, 5, -5;
224 cp[1][2] << -5, 5, -5;
225 cp[2][2] << 5, 5, -5;
226 cp[3][2] << 15, 5, -5;
227 cp[0][3] << -15, 0, -15;
228 cp[1][3] << -5, 5, -15;
229 cp[2][3] << 5, 5, -15;
230 cp[3][3] << 15, 0, -15;
237 s.set_control_point(cp[i][j], i, j);
240 TEST_ASSERT(s.open_u());
241 TEST_ASSERT(s.open_v());
247 norm=s.normal(u_ref, v_ref);
248 pt=s.f(u_ref, v_ref)+dist_ref*norm;
250 TEST_ASSERT(tol.approximately_equal(u, u_ref));
251 TEST_ASSERT(tol.approximately_equal(v, v_ref));
252 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
255 TEST_ASSERT(tol.approximately_equal(u, u_ref));
256 TEST_ASSERT(tol.approximately_equal(v, v_ref));
257 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
260 TEST_ASSERT(tol.approximately_equal(u, u_ref));
261 TEST_ASSERT(tol.approximately_equal(v, v_ref));
262 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
265 TEST_ASSERT(tol.approximately_equal(u, u_ref));
266 TEST_ASSERT(tol.approximately_equal(v, v_ref));
267 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
270 TEST_ASSERT(tol.approximately_equal(u, u_ref));
271 TEST_ASSERT(tol.approximately_equal(v, v_ref));
272 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
275 TEST_ASSERT(tol.approximately_equal(u, u_ref));
276 TEST_ASSERT(tol.approximately_equal(v, v_ref));
277 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
280 TEST_ASSERT(tol.approximately_equal(u, u_ref));
281 TEST_ASSERT(tol.approximately_equal(v, v_ref));
282 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
285 TEST_ASSERT(tol.approximately_equal(u, u_ref));
286 TEST_ASSERT(tol.approximately_equal(v, v_ref));
287 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
290 TEST_ASSERT(tol.approximately_equal(u, u_ref));
291 TEST_ASSERT(tol.approximately_equal(v, v_ref));
292 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
295 TEST_ASSERT(tol.approximately_equal(u, u_ref));
296 TEST_ASSERT(tol.approximately_equal(v, v_ref));
297 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
300 dist_ref=
static_cast<data_type
>(0.01);
303 norm=s.normal(u_ref, v_ref);
304 pt=s.f(u_ref, v_ref)+dist_ref*norm;
306 TEST_ASSERT(tol.approximately_equal(u, u_ref));
307 TEST_ASSERT(tol.approximately_equal(v, v_ref));
308 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
311 TEST_ASSERT(tol.approximately_equal(u, u_ref));
312 TEST_ASSERT(tol.approximately_equal(v, v_ref));
313 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
316 TEST_ASSERT(tol.approximately_equal(u, u_ref));
317 TEST_ASSERT(tol.approximately_equal(v, v_ref));
318 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
321 TEST_ASSERT(tol.approximately_equal(u, u_ref));
322 TEST_ASSERT(tol.approximately_equal(v, v_ref));
323 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
326 TEST_ASSERT(tol.approximately_equal(u, u_ref));
327 TEST_ASSERT(tol.approximately_equal(v, v_ref));
328 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
331 TEST_ASSERT(tol.approximately_equal(u, u_ref));
332 TEST_ASSERT(tol.approximately_equal(v, v_ref));
333 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
336 TEST_ASSERT(tol.approximately_equal(u, u_ref));
337 TEST_ASSERT(tol.approximately_equal(v, v_ref));
338 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
341 TEST_ASSERT(tol.approximately_equal(u, u_ref));
342 TEST_ASSERT(tol.approximately_equal(v, v_ref));
343 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
346 TEST_ASSERT(tol.approximately_equal(u, u_ref));
347 TEST_ASSERT(tol.approximately_equal(v, v_ref));
348 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
351 TEST_ASSERT(tol.approximately_equal(u, u_ref));
352 TEST_ASSERT(tol.approximately_equal(v, v_ref));
353 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
356 dist_ref=
static_cast<data_type
>(0.1);
359 norm=s.normal(u_ref, v_ref);
360 pt=s.f(u_ref, v_ref)+dist_ref*norm;
362 TEST_ASSERT(tol.approximately_equal(u, u_ref));
363 TEST_ASSERT(tol.approximately_equal(v, v_ref));
364 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
367 TEST_ASSERT(tol.approximately_equal(u, u_ref));
368 TEST_ASSERT(tol.approximately_equal(v, v_ref));
369 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
372 TEST_ASSERT(tol.approximately_equal(u, u_ref));
373 TEST_ASSERT(tol.approximately_equal(v, v_ref));
374 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
377 TEST_ASSERT(tol.approximately_equal(u, u_ref));
378 TEST_ASSERT(tol.approximately_equal(v, v_ref));
379 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
382 TEST_ASSERT(tol.approximately_equal(u, u_ref));
383 TEST_ASSERT(tol.approximately_equal(v, v_ref));
384 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
387 TEST_ASSERT(tol.approximately_equal(u, u_ref));
388 TEST_ASSERT(tol.approximately_equal(v, v_ref));
389 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
392 TEST_ASSERT(tol.approximately_equal(u, u_ref));
393 TEST_ASSERT(tol.approximately_equal(v, v_ref));
394 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
397 TEST_ASSERT(tol.approximately_equal(u, u_ref));
398 TEST_ASSERT(tol.approximately_equal(v, v_ref));
399 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
402 TEST_ASSERT(tol.approximately_equal(u, u_ref));
403 TEST_ASSERT(tol.approximately_equal(v, v_ref));
404 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
407 TEST_ASSERT(tol.approximately_equal(u, u_ref));
408 TEST_ASSERT(tol.approximately_equal(v, v_ref));
409 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
412 dist_ref=
static_cast<data_type
>(0.1);
415 norm=-s.normal(u_ref, v_ref);
416 pt=s.f(u_ref, v_ref)+dist_ref*norm;
418 TEST_ASSERT(tol.approximately_equal(u, u_ref));
419 TEST_ASSERT(tol.approximately_equal(v, v_ref));
420 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
423 TEST_ASSERT(tol.approximately_equal(u, u_ref));
424 TEST_ASSERT(tol.approximately_equal(v, v_ref));
425 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
428 TEST_ASSERT(tol.approximately_equal(u, u_ref));
429 TEST_ASSERT(tol.approximately_equal(v, v_ref));
430 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
433 TEST_ASSERT(tol.approximately_equal(u, u_ref));
434 TEST_ASSERT(tol.approximately_equal(v, v_ref));
435 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
438 TEST_ASSERT(tol.approximately_equal(u, u_ref));
439 TEST_ASSERT(tol.approximately_equal(v, v_ref));
440 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
443 TEST_ASSERT(tol.approximately_equal(u, u_ref));
444 TEST_ASSERT(tol.approximately_equal(v, v_ref));
445 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
448 TEST_ASSERT(tol.approximately_equal(u, u_ref));
449 TEST_ASSERT(tol.approximately_equal(v, v_ref));
450 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
453 TEST_ASSERT(tol.approximately_equal(u, u_ref));
454 TEST_ASSERT(tol.approximately_equal(v, v_ref));
455 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
458 TEST_ASSERT(tol.approximately_equal(u, u_ref));
459 TEST_ASSERT(tol.approximately_equal(v, v_ref));
460 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
463 TEST_ASSERT(tol.approximately_equal(u, u_ref));
464 TEST_ASSERT(tol.approximately_equal(v, v_ref));
465 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
468 dist_ref=
static_cast<data_type
>(1.1);
471 norm=s.normal(u_ref, v_ref);
472 pt=s.f(u_ref, v_ref)+dist_ref*norm;
474 TEST_ASSERT(tol.approximately_equal(u, u_ref));
475 TEST_ASSERT(tol.approximately_equal(v, v_ref));
476 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
479 TEST_ASSERT(tol.approximately_equal(u, u_ref));
480 TEST_ASSERT(tol.approximately_equal(v, v_ref));
481 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
484 TEST_ASSERT(tol.approximately_equal(u, u_ref));
485 TEST_ASSERT(tol.approximately_equal(v, v_ref));
486 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
489 TEST_ASSERT(tol.approximately_equal(u, u_ref));
490 TEST_ASSERT(tol.approximately_equal(v, v_ref));
491 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
494 TEST_ASSERT(tol.approximately_equal(u, u_ref));
495 TEST_ASSERT(tol.approximately_equal(v, v_ref));
496 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
499 TEST_ASSERT(tol.approximately_equal(u, u_ref));
500 TEST_ASSERT(tol.approximately_equal(v, v_ref));
501 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
504 TEST_ASSERT(tol.approximately_equal(u, u_ref));
505 TEST_ASSERT(tol.approximately_equal(v, v_ref));
506 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
509 TEST_ASSERT(tol.approximately_equal(u, u_ref));
510 TEST_ASSERT(tol.approximately_equal(v, v_ref));
511 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
514 TEST_ASSERT(tol.approximately_equal(u, u_ref));
515 TEST_ASSERT(tol.approximately_equal(v, v_ref));
516 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
519 TEST_ASSERT(tol.approximately_equal(u, u_ref));
520 TEST_ASSERT(tol.approximately_equal(v, v_ref));
521 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
525 u_ref=
static_cast<data_type
>(0.64);
526 v_ref=
static_cast<data_type
>(0.32);
527 norm=s.normal(u_ref, v_ref);
528 pt=s.f(u_ref, v_ref)+dist_ref*norm;
530 TEST_ASSERT(tol.approximately_equal(u, u_ref));
531 TEST_ASSERT(tol.approximately_equal(v, v_ref));
532 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
535 TEST_ASSERT(tol.approximately_equal(u, u_ref));
536 TEST_ASSERT(tol.approximately_equal(v, v_ref));
537 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
540 TEST_ASSERT(tol.approximately_equal(u, u_ref));
541 TEST_ASSERT(tol.approximately_equal(v, v_ref));
542 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
545 TEST_ASSERT(tol.approximately_equal(u, u_ref));
546 TEST_ASSERT(tol.approximately_equal(v, v_ref));
547 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
550 TEST_ASSERT(tol.approximately_equal(u, u_ref));
551 TEST_ASSERT(tol.approximately_equal(v, v_ref));
552 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
555 TEST_ASSERT(tol.approximately_equal(u, u_ref));
556 TEST_ASSERT(tol.approximately_equal(v, v_ref));
557 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
560 TEST_ASSERT(tol.approximately_equal(u, u_ref));
561 TEST_ASSERT(tol.approximately_equal(v, v_ref));
562 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
565 TEST_ASSERT(tol.approximately_equal(u, u_ref));
566 TEST_ASSERT(tol.approximately_equal(v, v_ref));
567 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
570 TEST_ASSERT(tol.approximately_equal(u, u_ref));
571 TEST_ASSERT(tol.approximately_equal(v, v_ref));
572 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
575 TEST_ASSERT(tol.approximately_equal(u, u_ref));
576 TEST_ASSERT(tol.approximately_equal(v, v_ref));
577 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
580 dist_ref=
static_cast<data_type
>(0.01);
581 u_ref=
static_cast<data_type
>(0.64);
582 v_ref=
static_cast<data_type
>(0.32);
583 norm=s.normal(u_ref, v_ref);
584 pt=s.f(u_ref, v_ref)+dist_ref*norm;
586 TEST_ASSERT(tol.approximately_equal(u, u_ref));
587 TEST_ASSERT(tol.approximately_equal(v, v_ref));
588 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
591 TEST_ASSERT(tol.approximately_equal(u, u_ref));
592 TEST_ASSERT(tol.approximately_equal(v, v_ref));
593 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
596 TEST_ASSERT(tol.approximately_equal(u, u_ref));
597 TEST_ASSERT(tol.approximately_equal(v, v_ref));
598 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
601 TEST_ASSERT(tol.approximately_equal(u, u_ref));
602 TEST_ASSERT(tol.approximately_equal(v, v_ref));
603 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
606 TEST_ASSERT(tol.approximately_equal(u, u_ref));
607 TEST_ASSERT(tol.approximately_equal(v, v_ref));
608 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
611 TEST_ASSERT(tol.approximately_equal(u, u_ref));
612 TEST_ASSERT(tol.approximately_equal(v, v_ref));
613 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
616 TEST_ASSERT(tol.approximately_equal(u, u_ref));
617 TEST_ASSERT(tol.approximately_equal(v, v_ref));
618 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
621 TEST_ASSERT(tol.approximately_equal(u, u_ref));
622 TEST_ASSERT(tol.approximately_equal(v, v_ref));
623 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
626 TEST_ASSERT(tol.approximately_equal(u, u_ref));
627 TEST_ASSERT(tol.approximately_equal(v, v_ref));
628 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
631 TEST_ASSERT(tol.approximately_equal(u, u_ref));
632 TEST_ASSERT(tol.approximately_equal(v, v_ref));
633 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
636 dist_ref=
static_cast<data_type
>(0.1);
637 u_ref=
static_cast<data_type
>(0.64);
638 v_ref=
static_cast<data_type
>(0.32);
639 norm=s.normal(u_ref, v_ref);
640 pt=s.f(u_ref, v_ref)+dist_ref*norm;
642 TEST_ASSERT(tol.approximately_equal(u, u_ref));
643 TEST_ASSERT(tol.approximately_equal(v, v_ref));
644 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
647 TEST_ASSERT(tol.approximately_equal(u, u_ref));
648 TEST_ASSERT(tol.approximately_equal(v, v_ref));
649 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
652 TEST_ASSERT(tol.approximately_equal(u, u_ref));
653 TEST_ASSERT(tol.approximately_equal(v, v_ref));
654 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
657 TEST_ASSERT(tol.approximately_equal(u, u_ref));
658 TEST_ASSERT(tol.approximately_equal(v, v_ref));
659 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
662 TEST_ASSERT(tol.approximately_equal(u, u_ref));
663 TEST_ASSERT(tol.approximately_equal(v, v_ref));
664 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
667 TEST_ASSERT(tol.approximately_equal(u, u_ref));
668 TEST_ASSERT(tol.approximately_equal(v, v_ref));
669 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
672 TEST_ASSERT(tol.approximately_equal(u, u_ref));
673 TEST_ASSERT(tol.approximately_equal(v, v_ref));
674 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
677 TEST_ASSERT(tol.approximately_equal(u, u_ref));
678 TEST_ASSERT(tol.approximately_equal(v, v_ref));
679 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
682 TEST_ASSERT(tol.approximately_equal(u, u_ref));
683 TEST_ASSERT(tol.approximately_equal(v, v_ref));
684 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
687 TEST_ASSERT(tol.approximately_equal(u, u_ref));
688 TEST_ASSERT(tol.approximately_equal(v, v_ref));
689 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
692 dist_ref=
static_cast<data_type
>(0.1);
693 u_ref=
static_cast<data_type
>(0.64);
694 v_ref=
static_cast<data_type
>(0.32);
695 norm=-s.normal(u_ref, v_ref);
696 pt=s.f(u_ref, v_ref)+dist_ref*norm;
698 TEST_ASSERT(tol.approximately_equal(u, u_ref));
699 TEST_ASSERT(tol.approximately_equal(v, v_ref));
700 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
703 TEST_ASSERT(tol.approximately_equal(u, u_ref));
704 TEST_ASSERT(tol.approximately_equal(v, v_ref));
705 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
708 TEST_ASSERT(tol.approximately_equal(u, u_ref));
709 TEST_ASSERT(tol.approximately_equal(v, v_ref));
710 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
713 TEST_ASSERT(tol.approximately_equal(u, u_ref));
714 TEST_ASSERT(tol.approximately_equal(v, v_ref));
715 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
718 TEST_ASSERT(tol.approximately_equal(u, u_ref));
719 TEST_ASSERT(tol.approximately_equal(v, v_ref));
720 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
723 TEST_ASSERT(tol.approximately_equal(u, u_ref));
724 TEST_ASSERT(tol.approximately_equal(v, v_ref));
725 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
728 TEST_ASSERT(tol.approximately_equal(u, u_ref));
729 TEST_ASSERT(tol.approximately_equal(v, v_ref));
730 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
733 TEST_ASSERT(tol.approximately_equal(u, u_ref));
734 TEST_ASSERT(tol.approximately_equal(v, v_ref));
735 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
738 TEST_ASSERT(tol.approximately_equal(u, u_ref));
739 TEST_ASSERT(tol.approximately_equal(v, v_ref));
740 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
743 TEST_ASSERT(tol.approximately_equal(u, u_ref));
744 TEST_ASSERT(tol.approximately_equal(v, v_ref));
745 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
748 dist_ref=
static_cast<data_type
>(1.1);
749 u_ref=
static_cast<data_type
>(0.64);
750 v_ref=
static_cast<data_type
>(0.32);
751 norm=s.normal(u_ref, v_ref);
752 pt=s.f(u_ref, v_ref)+dist_ref*norm;
754 TEST_ASSERT(tol.approximately_equal(u, u_ref));
755 TEST_ASSERT(tol.approximately_equal(v, v_ref));
756 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
759 TEST_ASSERT(tol.approximately_equal(u, u_ref));
760 TEST_ASSERT(tol.approximately_equal(v, v_ref));
761 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
764 TEST_ASSERT(tol.approximately_equal(u, u_ref));
765 TEST_ASSERT(tol.approximately_equal(v, v_ref));
766 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
769 TEST_ASSERT(tol.approximately_equal(u, u_ref));
770 TEST_ASSERT(tol.approximately_equal(v, v_ref));
771 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
774 TEST_ASSERT(tol.approximately_equal(u, u_ref));
775 TEST_ASSERT(tol.approximately_equal(v, v_ref));
776 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
779 TEST_ASSERT(tol.approximately_equal(u, u_ref));
780 TEST_ASSERT(tol.approximately_equal(v, v_ref));
781 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
784 TEST_ASSERT(tol.approximately_equal(u, u_ref));
785 TEST_ASSERT(tol.approximately_equal(v, v_ref));
786 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
789 TEST_ASSERT(tol.approximately_equal(u, u_ref));
790 TEST_ASSERT(tol.approximately_equal(v, v_ref));
791 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
794 TEST_ASSERT(tol.approximately_equal(u, u_ref));
795 TEST_ASSERT(tol.approximately_equal(v, v_ref));
796 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
799 TEST_ASSERT(tol.approximately_equal(u, u_ref));
800 TEST_ASSERT(tol.approximately_equal(v, v_ref));
801 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
804 dist_ref=
static_cast<data_type
>(0.1);
805 u_ref=
static_cast<data_type
>(0.01);
806 v_ref=
static_cast<data_type
>(0.01);
807 norm=s.normal(u_ref, v_ref);
808 pt=s.f(u_ref, v_ref)+dist_ref*norm;
810 TEST_ASSERT(tol.approximately_equal(u, u_ref));
811 TEST_ASSERT(tol.approximately_equal(v, v_ref));
812 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
815 TEST_ASSERT(tol.approximately_equal(u, u_ref));
816 TEST_ASSERT(tol.approximately_equal(v, v_ref));
817 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
820 TEST_ASSERT(tol.approximately_equal(u, u_ref));
821 TEST_ASSERT(tol.approximately_equal(v, v_ref));
822 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
825 TEST_ASSERT(tol.approximately_equal(u, u_ref));
826 TEST_ASSERT(tol.approximately_equal(v, v_ref));
827 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
830 TEST_ASSERT(tol.approximately_equal(u, u_ref));
831 TEST_ASSERT(tol.approximately_equal(v, v_ref));
832 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
835 TEST_ASSERT(tol.approximately_equal(u, u_ref));
836 TEST_ASSERT(tol.approximately_equal(v, v_ref));
837 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
840 TEST_ASSERT(tol.approximately_equal(u, u_ref));
841 TEST_ASSERT(tol.approximately_equal(v, v_ref));
842 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
845 TEST_ASSERT(tol.approximately_equal(u, u_ref));
846 TEST_ASSERT(tol.approximately_equal(v, v_ref));
847 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
850 TEST_ASSERT(tol.approximately_equal(u, u_ref));
851 TEST_ASSERT(tol.approximately_equal(v, v_ref));
852 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
855 dist_ref=
static_cast<data_type
>(0.1);
856 u_ref=
static_cast<data_type
>(0.99);
857 v_ref=
static_cast<data_type
>(0.01);
858 norm=s.normal(u_ref, v_ref);
859 pt=s.f(u_ref, v_ref)+dist_ref*norm;
861 TEST_ASSERT(tol.approximately_equal(u, u_ref));
862 TEST_ASSERT(tol.approximately_equal(v, v_ref));
863 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
866 TEST_ASSERT(tol.approximately_equal(u, u_ref));
867 TEST_ASSERT(tol.approximately_equal(v, v_ref));
868 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
871 TEST_ASSERT(tol.approximately_equal(u, u_ref));
872 TEST_ASSERT(tol.approximately_equal(v, v_ref));
873 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
876 TEST_ASSERT(tol.approximately_equal(u, u_ref));
877 TEST_ASSERT(tol.approximately_equal(v, v_ref));
878 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
881 TEST_ASSERT(tol.approximately_equal(u, u_ref));
882 TEST_ASSERT(tol.approximately_equal(v, v_ref));
883 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
886 TEST_ASSERT(tol.approximately_equal(u, u_ref));
887 TEST_ASSERT(tol.approximately_equal(v, v_ref));
888 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
891 TEST_ASSERT(tol.approximately_equal(u, u_ref));
892 TEST_ASSERT(tol.approximately_equal(v, v_ref));
893 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
896 TEST_ASSERT(tol.approximately_equal(u, u_ref));
897 TEST_ASSERT(tol.approximately_equal(v, v_ref));
898 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
901 TEST_ASSERT(tol.approximately_equal(u, u_ref));
902 TEST_ASSERT(tol.approximately_equal(v, v_ref));
903 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
906 dist_ref=
static_cast<data_type
>(0.1);
907 u_ref=
static_cast<data_type
>(0.01);
908 v_ref=
static_cast<data_type
>(0.999);
909 norm=s.normal(u_ref, v_ref);
910 pt=s.f(u_ref, v_ref)+dist_ref*norm;
912 TEST_ASSERT(tol.approximately_equal(u, u_ref));
913 TEST_ASSERT(tol.approximately_equal(v, v_ref));
914 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
917 TEST_ASSERT(tol.approximately_equal(u, u_ref));
918 TEST_ASSERT(tol.approximately_equal(v, v_ref));
919 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
922 TEST_ASSERT(tol.approximately_equal(u, u_ref));
923 TEST_ASSERT(tol.approximately_equal(v, v_ref));
924 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
927 TEST_ASSERT(tol.approximately_equal(u, u_ref));
928 TEST_ASSERT(tol.approximately_equal(v, v_ref));
929 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
932 TEST_ASSERT(tol.approximately_equal(u, u_ref));
933 TEST_ASSERT(tol.approximately_equal(v, v_ref));
934 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
937 TEST_ASSERT(tol.approximately_equal(u, u_ref));
938 TEST_ASSERT(tol.approximately_equal(v, v_ref));
939 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
942 TEST_ASSERT(tol.approximately_equal(u, u_ref));
943 TEST_ASSERT(tol.approximately_equal(v, v_ref));
944 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
947 TEST_ASSERT(tol.approximately_equal(u, u_ref));
948 TEST_ASSERT(tol.approximately_equal(v, v_ref));
949 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
952 TEST_ASSERT(tol.approximately_equal(u, u_ref));
953 TEST_ASSERT(tol.approximately_equal(v, v_ref));
954 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
957 dist_ref=
static_cast<data_type
>(0.1);
958 u_ref=
static_cast<data_type
>(0.999);
959 v_ref=
static_cast<data_type
>(0.999);
960 norm=s.normal(u_ref, v_ref);
961 pt=s.f(u_ref, v_ref)+dist_ref*norm;
963 TEST_ASSERT(tol.approximately_equal(u, u_ref));
964 TEST_ASSERT(tol.approximately_equal(v, v_ref));
965 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
968 TEST_ASSERT(tol.approximately_equal(u, u_ref));
969 TEST_ASSERT(tol.approximately_equal(v, v_ref));
970 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
973 TEST_ASSERT(tol.approximately_equal(u, u_ref));
974 TEST_ASSERT(tol.approximately_equal(v, v_ref));
975 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
978 TEST_ASSERT(tol.approximately_equal(u, u_ref));
979 TEST_ASSERT(tol.approximately_equal(v, v_ref));
980 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
983 TEST_ASSERT(tol.approximately_equal(u, u_ref));
984 TEST_ASSERT(tol.approximately_equal(v, v_ref));
985 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
988 TEST_ASSERT(tol.approximately_equal(u, u_ref));
989 TEST_ASSERT(tol.approximately_equal(v, v_ref));
990 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
993 TEST_ASSERT(tol.approximately_equal(u, u_ref));
994 TEST_ASSERT(tol.approximately_equal(v, v_ref));
995 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
998 TEST_ASSERT(tol.approximately_equal(u, u_ref));
999 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1000 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1003 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1004 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1005 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1008 dist_ref=
static_cast<data_type
>(0.1);
1009 u_ref=
static_cast<data_type
>(1);
1010 v_ref=
static_cast<data_type
>(0.4);
1011 norm=s.normal(u_ref, v_ref);
1012 u_contra=-norm.cross(s.f_v(u_ref, v_ref));
1013 u_contra.normalize();
1014 pt=
static_cast<data_type
>(0.01)*u_contra+s.f(u_ref, v_ref)+dist_ref*norm;
1017 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1018 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1019 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1022 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1023 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1024 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1027 data_type u_alt, v_alt, dist_alt;
1034 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1035 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1036 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1039 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1040 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1041 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1044 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1045 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1046 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1049 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1050 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1051 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1054 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1055 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1056 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1059 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1060 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1061 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1064 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1065 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1066 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1069 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1070 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1071 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1074 dist_ref=
static_cast<data_type
>(0.1);
1075 u_ref=
static_cast<data_type
>(0.6);
1076 v_ref=
static_cast<data_type
>(1);
1077 norm=s.normal(u_ref, v_ref);
1078 v_contra=norm.cross(s.f_u(u_ref, v_ref));
1079 v_contra.normalize();
1080 pt=
static_cast<data_type
>(0.01)*v_contra+s.f(u_ref, v_ref)+dist_ref*norm;
1083 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1084 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1085 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1088 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1089 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1090 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1099 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1100 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1101 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1104 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1105 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1106 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1109 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1110 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1111 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1114 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1115 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1116 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1119 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1120 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1121 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1124 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1125 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1126 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1129 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1130 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1131 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1134 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1135 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1136 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1139 dist_ref=
static_cast<data_type
>(0.5);
1140 u_ref=
static_cast<data_type
>(0);
1141 v_ref=
static_cast<data_type
>(0.2);
1142 norm=s.normal(u_ref, v_ref);
1143 u_contra=-norm.cross(s.f_v(u_ref, v_ref));
1144 u_contra.normalize();
1145 pt=
static_cast<data_type
>(-0.1)*u_contra+s.f(u_ref, v_ref)+dist_ref*norm;
1148 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1149 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1150 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1153 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1154 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1155 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1164 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1165 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1166 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1169 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1170 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1171 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1174 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1175 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1176 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1179 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1180 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1181 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1184 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1185 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1186 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1189 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1190 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1191 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1194 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1195 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1196 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1199 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1200 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1201 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1204 dist_ref=
static_cast<data_type
>(0.5);
1205 u_ref=
static_cast<data_type
>(0.2);
1206 v_ref=
static_cast<data_type
>(0);
1207 norm=s.normal(u_ref, v_ref);
1208 v_contra=norm.cross(s.f_u(u_ref, v_ref));
1209 v_contra.normalize();
1210 pt=
static_cast<data_type
>(-0.1)*v_contra+s.f(u_ref, v_ref)+dist_ref*norm;
1213 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1214 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1215 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1218 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1219 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1220 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1229 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1230 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1231 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1234 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1235 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1236 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1239 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1240 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1241 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1244 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1245 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1246 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1249 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1250 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1251 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1254 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1255 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1256 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1259 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1260 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1261 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1264 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1265 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1266 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1269 TEST_ASSERT(tol.approximately_equal(u, u_alt));
1270 TEST_ASSERT(tol.approximately_equal(v, v_alt));
1271 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
1277 const index_type n(12), m(3);
1278 surface_type s(n, m);
1279 point_type cp[n+1], offset[m+1], pt_out;
1280 point_type pt, norm, u_contra, v_contra;
1281 data_type z[m+1], dist, u, v, dist_ref, u_ref, v_ref;
1282 data_type u_off(static_cast<data_type>(0.1)), v_off(static_cast<data_type>(0.1));
1291 cp[5] << -1, 0.5, 0;
1293 cp[7] << -1,-0.5, 0;
1296 cp[10] << 0.5,-1, 0;
1297 cp[11] << 1,-0.5, 0;
1303 offset[0] << 0, 0, 0;
1304 offset[1] << 0.5, 0, 0;
1305 offset[2] << -0.5, 0.5, 0;
1306 offset[3] << 0, 0, 0;
1309 for (j=0; j<=m; ++j)
1311 for (i=0; i<=n; ++i)
1314 s.set_control_point(cp[i]+offset[j], i, j);
1317 TEST_ASSERT(s.closed_u());
1318 TEST_ASSERT(s.open_v());
1322 u_ref=
static_cast<data_type
>(0.35);
1323 v_ref=
static_cast<data_type
>(0.35);
1324 norm=s.normal(u_ref, v_ref);
1325 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1327 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1328 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1329 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1332 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1333 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1334 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1337 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1338 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1339 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1342 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1343 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1344 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1347 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1348 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1349 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1352 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1353 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1354 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1357 dist_ref=
static_cast<data_type
>(0.01);
1358 u_ref=
static_cast<data_type
>(0.35);
1359 v_ref=
static_cast<data_type
>(0.35);
1360 norm=-s.normal(u_ref, v_ref);
1361 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1363 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1364 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1365 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1368 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1369 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1370 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1373 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1374 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1375 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1378 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1379 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1380 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1383 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1384 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1385 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1388 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1389 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1390 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1393 dist_ref=
static_cast<data_type
>(0.1);
1394 u_ref=
static_cast<data_type
>(0.35);
1395 v_ref=
static_cast<data_type
>(0.35);
1396 norm=-s.normal(u_ref, v_ref);
1397 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1399 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1400 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1401 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1404 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1405 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1406 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1409 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1410 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1411 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1414 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1415 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1416 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1419 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1420 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1421 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1424 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1425 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1426 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1429 dist_ref=
static_cast<data_type
>(0.72);
1430 u_ref=
static_cast<data_type
>(0.35);
1431 v_ref=
static_cast<data_type
>(0.35);
1432 norm=-s.normal(u_ref, v_ref);
1433 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1435 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1436 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1437 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1440 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1441 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1442 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1446 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1447 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1448 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1451 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1452 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1453 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1456 dist_ref=
static_cast<data_type
>(0.1);
1457 u_ref=
static_cast<data_type
>(0.35);
1458 v_ref=
static_cast<data_type
>(0.35);
1459 norm=s.normal(u_ref, v_ref);
1460 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1462 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1463 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1464 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1467 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1468 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1469 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1472 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1473 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1474 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1477 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1478 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1479 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1482 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1483 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1484 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1487 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1488 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1489 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1493 u_ref=
static_cast<data_type
>(0.25);
1494 v_ref=
static_cast<data_type
>(0.7);
1495 norm=s.normal(u_ref, v_ref);
1496 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1498 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1499 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1500 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1503 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1504 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1505 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1508 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1509 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1510 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1513 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1514 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1515 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1518 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1519 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1520 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1523 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1524 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1525 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1528 dist_ref=
static_cast<data_type
>(0.1);
1529 u_ref=
static_cast<data_type
>(0.25);
1530 v_ref=
static_cast<data_type
>(0.999);
1531 norm=-s.normal(u_ref, v_ref);
1532 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1534 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1535 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1536 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1539 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1540 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1541 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1544 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1545 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1546 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1549 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1550 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1551 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1554 dist_ref=
static_cast<data_type
>(0.1);
1555 u_ref=
static_cast<data_type
>(0.25);
1556 v_ref=
static_cast<data_type
>(0.999);
1557 norm=s.normal(u_ref, v_ref);
1558 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1560 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1561 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1562 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1565 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1566 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1567 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1570 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1571 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1572 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1575 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1576 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1577 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1580 dist_ref=
static_cast<data_type
>(0.1);
1581 u_ref=
static_cast<data_type
>(0.25);
1582 v_ref=
static_cast<data_type
>(0.001);
1583 norm=-s.normal(u_ref, v_ref);
1584 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1586 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1587 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1588 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1591 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1592 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1593 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1596 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1597 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1598 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1601 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1602 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1603 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1606 dist_ref=
static_cast<data_type
>(0.1);
1607 u_ref=
static_cast<data_type
>(0.25);
1608 v_ref=
static_cast<data_type
>(0.001);
1609 norm=s.normal(u_ref, v_ref);
1610 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1612 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1613 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1614 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1617 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1618 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1619 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1622 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1623 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1624 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1627 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1628 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1629 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1632 dist_ref=
static_cast<data_type
>(0.1);
1633 u_ref=
static_cast<data_type
>(0.001);
1634 v_ref=
static_cast<data_type
>(0.3);
1635 norm=-s.normal(u_ref, v_ref);
1636 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1638 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1639 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1640 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1643 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1644 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1645 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1648 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1649 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1650 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1653 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1654 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1655 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1658 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1659 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1660 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1663 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1664 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1665 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1668 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1669 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1670 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1673 dist_ref=
static_cast<data_type
>(0.1);
1674 u_ref=
static_cast<data_type
>(0.001);
1675 v_ref=
static_cast<data_type
>(0.3);
1676 norm=s.normal(u_ref, v_ref);
1677 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1679 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1680 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1681 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1684 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1685 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1686 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1689 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1690 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1691 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1694 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1695 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1696 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1699 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1700 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1701 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1704 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1705 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1706 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1709 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1710 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1711 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1714 dist_ref=
static_cast<data_type
>(0.1);
1715 u_ref=
static_cast<data_type
>(0.999);
1716 v_ref=
static_cast<data_type
>(0.3);
1717 norm=-s.normal(u_ref, v_ref);
1718 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1720 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1721 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1722 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1725 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1726 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1727 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1730 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1731 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1732 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1735 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1736 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1737 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1740 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1741 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1742 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1745 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1746 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1747 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1750 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1751 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1752 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1755 dist_ref=
static_cast<data_type
>(0.1);
1756 u_ref=
static_cast<data_type
>(0.999);
1757 v_ref=
static_cast<data_type
>(0.3);
1758 norm=s.normal(u_ref, v_ref);
1759 pt=s.f(u_ref, v_ref)+dist_ref*norm;
1761 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1762 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1763 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1766 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1767 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1768 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1771 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1772 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1773 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1776 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1777 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1778 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1781 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1782 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1783 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1786 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1787 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1788 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1791 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1792 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1793 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1812 const index_type n(3), m(3);
1813 surface_type s(n, m);
1814 point_type cp[3+1][3+1], pt_out;
1815 point_type pt, norm, u_contra, v_contra;
1816 data_type dist, u, v, dist_ref, u_ref, v_ref;
1817 data_type u_off(static_cast<data_type>(0.2)), v_off(static_cast<data_type>(0.2));
1819 piecewise_surface_type pws;
1825 cp[0][0] << -15, 0, 15;
1826 cp[1][0] << -5, 5, 15;
1827 cp[2][0] << 5, 5, 15;
1828 cp[3][0] << 15, 0, 15;
1829 cp[0][1] << -15, 5, 5;
1830 cp[1][1] << -5, 5, 5;
1831 cp[2][1] << 5, 5, 5;
1832 cp[3][1] << 15, 5, 5;
1833 cp[0][2] << -15, 5, -5;
1834 cp[1][2] << -5, 5, -5;
1835 cp[2][2] << 5, 5, -5;
1836 cp[3][2] << 15, 5, -5;
1837 cp[0][3] << -15, 0, -15;
1838 cp[1][3] << -5, 5, -15;
1839 cp[2][3] << 5, 5, -15;
1840 cp[3][3] << 15, 0, -15;
1843 for (i=0; i<=n; ++i)
1845 for (j=0; j<=m; ++j)
1847 s.set_control_point(cp[i][j], i, j);
1850 TEST_ASSERT(s.open_u());
1851 TEST_ASSERT(s.open_v());
1853 err=pws.
set(s, 0, 0);
1856 pws.
split_u(static_cast<data_type>(0.2));
1857 pws.
split_u(static_cast<data_type>(0.4));
1858 pws.
split_u(static_cast<data_type>(0.6));
1859 pws.
split_u(static_cast<data_type>(0.8));
1861 pws.
split_v(static_cast<data_type>(0.2));
1862 pws.
split_v(static_cast<data_type>(0.4));
1863 pws.
split_v(static_cast<data_type>(0.6));
1864 pws.
split_v(static_cast<data_type>(0.8));
1870 norm=pws.
normal(u_ref, v_ref);
1871 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
1874 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1875 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1876 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1879 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1880 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1881 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1884 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1885 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1886 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1889 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1890 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1891 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1894 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1895 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1896 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1899 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1900 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1901 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1904 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1905 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1906 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1909 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1910 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1911 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1914 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1915 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1916 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1919 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1920 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1921 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1924 dist_ref=
static_cast<data_type
>(0.01);
1927 norm=pws.
normal(u_ref, v_ref);
1928 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
1930 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1931 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1932 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1935 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1936 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1937 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1940 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1941 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1942 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1945 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1946 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1947 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1950 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1951 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1952 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1955 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1956 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1957 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1960 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1961 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1962 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1965 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1966 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1967 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1970 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1971 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1972 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1975 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1976 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1977 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1980 dist_ref=
static_cast<data_type
>(0.1);
1983 norm=pws.
normal(u_ref, v_ref);
1984 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
1986 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1987 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1988 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1991 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1992 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1993 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
1996 TEST_ASSERT(tol.approximately_equal(u, u_ref));
1997 TEST_ASSERT(tol.approximately_equal(v, v_ref));
1998 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2001 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2002 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2003 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2006 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2007 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2008 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2011 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2012 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2013 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2016 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2017 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2018 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2021 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2022 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2023 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2026 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2027 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2028 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2031 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2032 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2033 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2036 dist_ref=
static_cast<data_type
>(0.1);
2039 norm=-pws.
normal(u_ref, v_ref);
2040 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2042 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2043 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2044 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2047 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2048 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2049 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2052 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2053 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2054 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2057 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2058 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2059 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2062 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2063 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2064 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2067 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2068 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2069 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2072 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2073 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2074 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2077 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2078 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2079 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2082 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2083 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2084 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2087 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2088 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2089 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2092 dist_ref=
static_cast<data_type
>(1.1);
2095 norm=pws.
normal(u_ref, v_ref);
2096 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2098 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2099 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2100 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2103 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2104 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2105 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2108 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2109 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2110 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2113 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2114 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2115 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2118 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2119 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2120 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2123 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2124 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2125 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2128 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2129 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2130 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2133 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2134 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2135 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2138 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2139 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2140 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2143 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2144 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2145 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2149 u_ref=
static_cast<data_type
>(0.64);
2150 v_ref=
static_cast<data_type
>(0.32);
2151 norm=pws.
normal(u_ref, v_ref);
2152 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2154 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2155 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2156 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2159 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2160 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2161 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2164 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2165 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2166 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2169 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2170 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2171 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2174 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2175 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2176 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2179 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2180 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2181 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2184 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2185 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2186 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2189 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2190 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2191 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2194 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2195 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2196 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2199 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2200 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2201 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2204 dist_ref=
static_cast<data_type
>(0.01);
2205 u_ref=
static_cast<data_type
>(0.64);
2206 v_ref=
static_cast<data_type
>(0.32);
2207 norm=pws.
normal(u_ref, v_ref);
2208 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2210 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2211 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2212 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2215 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2216 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2217 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2220 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2221 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2222 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2225 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2226 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2227 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2230 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2231 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2232 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2235 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2236 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2237 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2240 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2241 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2242 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2245 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2246 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2247 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2250 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2251 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2252 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2255 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2256 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2257 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2260 dist_ref=
static_cast<data_type
>(0.1);
2261 u_ref=
static_cast<data_type
>(0.64);
2262 v_ref=
static_cast<data_type
>(0.32);
2263 norm=pws.
normal(u_ref, v_ref);
2264 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2266 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2267 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2268 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2271 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2272 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2273 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2276 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2277 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2278 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2281 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2282 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2283 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2286 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2287 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2288 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2291 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2292 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2293 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2296 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2297 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2298 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2301 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2302 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2303 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2306 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2307 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2308 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2311 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2312 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2313 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2316 dist_ref=
static_cast<data_type
>(0.1);
2317 u_ref=
static_cast<data_type
>(0.64);
2318 v_ref=
static_cast<data_type
>(0.32);
2319 norm=-pws.
normal(u_ref, v_ref);
2320 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2322 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2323 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2324 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2327 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2328 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2329 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2332 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2333 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2334 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2337 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2338 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2339 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2342 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2343 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2344 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2347 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2348 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2349 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2352 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2353 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2354 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2357 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2358 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2359 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2362 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2363 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2364 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2367 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2368 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2369 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2372 dist_ref=
static_cast<data_type
>(1.1);
2373 u_ref=
static_cast<data_type
>(0.64);
2374 v_ref=
static_cast<data_type
>(0.32);
2375 norm=pws.
normal(u_ref, v_ref);
2376 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2378 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2379 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2380 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2383 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2384 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2385 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2388 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2389 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2390 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2393 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2394 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2395 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2398 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2399 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2400 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2403 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2404 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2405 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2408 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2409 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2410 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2413 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2414 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2415 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2418 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2419 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2420 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2423 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2424 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2425 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2428 dist_ref=
static_cast<data_type
>(0.1);
2429 u_ref=
static_cast<data_type
>(0.01);
2430 v_ref=
static_cast<data_type
>(0.01);
2431 norm=pws.
normal(u_ref, v_ref);
2432 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2434 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2435 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2436 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2439 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2440 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2441 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2444 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2445 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2446 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2449 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2450 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2451 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2454 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2455 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2456 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2459 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2460 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2461 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2464 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2465 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2466 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2469 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2470 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2471 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2474 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2475 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2476 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2479 dist_ref=
static_cast<data_type
>(0.1);
2480 u_ref=
static_cast<data_type
>(0.99);
2481 v_ref=
static_cast<data_type
>(0.01);
2482 norm=pws.
normal(u_ref, v_ref);
2483 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2485 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2486 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2487 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2490 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2491 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2492 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2495 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2496 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2497 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2500 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2501 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2502 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2505 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2506 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2507 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2510 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2511 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2512 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2515 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2516 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2517 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2520 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2521 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2522 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2525 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2526 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2527 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2530 dist_ref=
static_cast<data_type
>(0.1);
2531 u_ref=
static_cast<data_type
>(0.01);
2532 v_ref=
static_cast<data_type
>(0.999);
2533 norm=pws.
normal(u_ref, v_ref);
2534 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2536 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2537 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2538 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2541 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2542 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2543 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2546 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2547 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2548 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2551 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2552 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2553 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2556 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2557 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2558 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2561 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2562 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2563 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2566 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2567 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2568 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2571 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2572 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2573 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2576 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2577 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2578 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2581 dist_ref=
static_cast<data_type
>(0.1);
2582 u_ref=
static_cast<data_type
>(0.999);
2583 v_ref=
static_cast<data_type
>(0.999);
2584 norm=pws.
normal(u_ref, v_ref);
2585 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
2587 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2588 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2589 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2592 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2593 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2594 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2597 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2598 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2599 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2602 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2603 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2604 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2607 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2608 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2609 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2612 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2613 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2614 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2617 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2618 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2619 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2622 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2623 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2624 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2627 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2628 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2629 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2632 dist_ref=
static_cast<data_type
>(0.1);
2633 u_ref=
static_cast<data_type
>(1);
2634 v_ref=
static_cast<data_type
>(0.4);
2635 norm=pws.
normal(u_ref, v_ref);
2636 u_contra=-norm.cross(pws.
f_v(u_ref, v_ref));
2637 u_contra.normalize();
2638 pt=
static_cast<data_type
>(0.01)*u_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
2641 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2642 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2643 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2646 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2647 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2648 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2651 data_type u_alt, v_alt, dist_alt;
2658 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2659 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2660 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2663 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2664 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2665 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2668 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2669 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2670 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2673 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2674 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2675 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2678 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2679 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2680 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2683 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2684 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2685 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2688 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2689 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2690 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2693 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2694 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2695 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2698 dist_ref=
static_cast<data_type
>(0.1);
2699 u_ref=
static_cast<data_type
>(0.6);
2700 v_ref=
static_cast<data_type
>(1);
2701 norm=pws.
normal(u_ref, v_ref);
2702 v_contra=norm.cross(pws.
f_u(u_ref, v_ref));
2703 v_contra.normalize();
2704 pt=
static_cast<data_type
>(0.01)*v_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
2707 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2708 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2709 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2712 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2713 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2714 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2723 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2724 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2725 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2728 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2729 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2730 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2733 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2734 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2735 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2738 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2739 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2740 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2743 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2744 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2745 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2748 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2749 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2750 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2753 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2754 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2755 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2758 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2759 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2760 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2763 dist_ref=
static_cast<data_type
>(0.5);
2764 u_ref=
static_cast<data_type
>(0);
2765 v_ref=
static_cast<data_type
>(0.2);
2766 norm=pws.
normal(u_ref, v_ref);
2767 u_contra=-norm.cross(pws.
f_v(u_ref, v_ref));
2768 u_contra.normalize();
2769 pt=
static_cast<data_type
>(-0.1)*u_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
2772 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2773 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2774 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2777 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2778 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2779 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2788 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2789 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2790 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2793 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2794 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2795 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2798 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2799 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2800 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2803 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2804 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2805 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2808 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2809 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2810 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2813 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2814 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2815 if (
typeid(data_type)==
typeid(float))
2817 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2821 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2825 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2826 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2827 if (
typeid(data_type)==
typeid(float))
2829 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2833 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2837 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2838 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2839 if (
typeid(data_type)==
typeid(float))
2841 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2845 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2849 dist_ref=
static_cast<data_type
>(0.5);
2850 u_ref=
static_cast<data_type
>(0.2);
2851 v_ref=
static_cast<data_type
>(0);
2852 norm=pws.
normal(u_ref, v_ref);
2853 v_contra=norm.cross(pws.
f_u(u_ref, v_ref));
2854 v_contra.normalize();
2855 pt=
static_cast<data_type
>(-0.1)*v_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
2858 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2859 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2860 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2863 TEST_ASSERT(tol.approximately_equal(u, u_ref));
2864 TEST_ASSERT(tol.approximately_equal(v, v_ref));
2865 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
2874 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2875 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2876 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2879 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2880 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2881 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2884 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2885 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2886 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2889 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2890 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2891 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2894 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2895 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2896 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2899 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2900 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2901 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2904 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2905 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2906 if (
typeid(data_type)==
typeid(float))
2908 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2912 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2916 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2917 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2918 if (
typeid(data_type)==
typeid(float))
2920 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2924 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2928 TEST_ASSERT(tol.approximately_equal(u, u_alt));
2929 TEST_ASSERT(tol.approximately_equal(v, v_alt));
2930 if (
typeid(data_type)==
typeid(float))
2932 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
2936 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
2942 const index_type n(3), m(3);
2943 surface_type s(n, m);
2944 point_type cp[3+1][3+1], pt_out;
2945 point_type pt, norm, u_contra, v_contra;
2946 data_type dist, u, v, dist_ref, u_ref, v_ref;
2947 data_type u_off(static_cast<data_type>(0.2)), v_off(static_cast<data_type>(0.2));
2949 piecewise_surface_type pws;
2955 cp[0][0] << -15, 0, 15;
2956 cp[1][0] << -5, 5, 15;
2957 cp[2][0] << 5, 5, 15;
2958 cp[3][0] << 15, 0, 15;
2959 cp[0][1] << -15, 5, 5;
2960 cp[1][1] << -5, 5, 5;
2961 cp[2][1] << 5, 5, 5;
2962 cp[3][1] << 15, 5, 5;
2963 cp[0][2] << -15, 5, -5;
2964 cp[1][2] << -5, 5, -5;
2965 cp[2][2] << 5, 5, -5;
2966 cp[3][2] << 15, 5, -5;
2967 cp[0][3] << -15, 0, -15;
2968 cp[1][3] << -5, 5, -15;
2969 cp[2][3] << 5, 5, -15;
2970 cp[3][3] << 15, 0, -15;
2973 for (i=0; i<=n; ++i)
2975 for (j=0; j<=m; ++j)
2977 s.set_control_point(cp[i][j], i, j);
2980 TEST_ASSERT(s.open_u());
2981 TEST_ASSERT(s.open_v());
2983 err=pws.
set(s, 0, 0);
2986 data_type u0(static_cast<data_type>(1.4));
2987 data_type v0(static_cast<data_type>(2.2));
2992 pws.
split_u(u0+static_cast<data_type>(0.2));
2993 pws.
split_u(u0+static_cast<data_type>(0.4));
2994 pws.
split_u(u0+static_cast<data_type>(0.6));
2995 pws.
split_u(u0+static_cast<data_type>(0.8));
2997 pws.
split_v(v0+static_cast<data_type>(0.2));
2998 pws.
split_v(v0+static_cast<data_type>(0.4));
2999 pws.
split_v(v0+static_cast<data_type>(0.6));
3000 pws.
split_v(v0+static_cast<data_type>(0.8));
3004 u_ref=
static_cast<data_type
>(0.25)+u0;
3005 v_ref=
static_cast<data_type
>(0.25)+v0;
3006 norm=pws.
normal(u_ref, v_ref);
3007 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3009 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3010 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3011 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3014 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3015 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3016 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3019 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3020 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3021 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3024 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3025 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3026 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3029 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3030 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3031 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3034 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3035 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3036 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3039 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3040 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3041 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3044 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3045 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3046 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3049 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3050 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3051 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3054 dist_ref=
static_cast<data_type
>(0.01);
3055 u_ref=
static_cast<data_type
>(0.25)+u0;
3056 v_ref=
static_cast<data_type
>(0.25)+v0;
3057 norm=pws.
normal(u_ref, v_ref);
3058 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3060 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3061 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3062 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3065 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3066 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3067 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3070 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3071 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3072 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3075 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3076 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3077 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3080 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3081 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3082 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3085 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3086 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3087 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3090 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3091 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3092 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3095 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3096 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3097 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3100 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3101 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3102 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3105 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3106 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3107 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3110 dist_ref=
static_cast<data_type
>(0.1);
3111 u_ref=
static_cast<data_type
>(0.25)+u0;
3112 v_ref=
static_cast<data_type
>(0.25)+v0;
3113 norm=pws.
normal(u_ref, v_ref);
3114 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3116 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3117 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3118 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3121 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3122 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3123 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3126 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3127 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3128 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3131 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3132 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3133 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3136 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3137 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3138 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3141 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3142 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3143 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3146 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3147 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3148 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3151 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3152 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3153 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3156 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3157 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3158 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3161 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3162 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3163 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3166 dist_ref=
static_cast<data_type
>(0.1);
3167 u_ref=
static_cast<data_type
>(0.25)+u0;
3168 v_ref=
static_cast<data_type
>(0.25)+v0;
3169 norm=-pws.
normal(u_ref, v_ref);
3170 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3172 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3173 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3174 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3177 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3178 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3179 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3182 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3183 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3184 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3187 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3188 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3189 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3192 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3193 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3194 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3197 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3198 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3199 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3202 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3203 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3204 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3207 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3208 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3209 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3212 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3213 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3214 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3217 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3218 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3219 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3222 dist_ref=
static_cast<data_type
>(1.1);
3223 u_ref=
static_cast<data_type
>(0.25)+u0;
3224 v_ref=
static_cast<data_type
>(0.25)+v0;
3225 norm=pws.
normal(u_ref, v_ref);
3226 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3228 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3229 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3230 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3233 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3234 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3235 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3238 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3239 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3240 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3243 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3244 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3245 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3248 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3249 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3250 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3253 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3254 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3255 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3258 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3259 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3260 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3263 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3264 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3265 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3268 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3269 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3270 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3273 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3274 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3275 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3279 u_ref=
static_cast<data_type
>(0.64)+u0;
3280 v_ref=
static_cast<data_type
>(0.32)+v0;
3281 norm=pws.
normal(u_ref, v_ref);
3282 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3284 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3285 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3286 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3289 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3290 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3291 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3294 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3295 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3296 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3299 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3300 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3301 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3304 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3305 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3306 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3309 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3310 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3311 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3314 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3315 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3316 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3319 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3320 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3321 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3324 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3325 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3326 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3329 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3330 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3331 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3334 dist_ref=
static_cast<data_type
>(0.01);
3335 u_ref=
static_cast<data_type
>(0.64)+u0;
3336 v_ref=
static_cast<data_type
>(0.32)+v0;
3337 norm=pws.
normal(u_ref, v_ref);
3338 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3340 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3341 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3342 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3345 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3346 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3347 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3350 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3351 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3352 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3355 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3356 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3357 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3360 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3361 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3362 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3365 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3366 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3367 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3370 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3371 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3372 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3375 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3376 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3377 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3380 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3381 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3382 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3385 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3386 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3387 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3390 dist_ref=
static_cast<data_type
>(0.1);
3391 u_ref=
static_cast<data_type
>(0.64)+u0;
3392 v_ref=
static_cast<data_type
>(0.32)+v0;
3393 norm=pws.
normal(u_ref, v_ref);
3394 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3396 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3397 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3398 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3401 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3402 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3403 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3406 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3407 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3408 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3411 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3412 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3413 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3416 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3417 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3418 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3421 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3422 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3423 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3426 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3427 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3428 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3431 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3432 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3433 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3436 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3437 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3438 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3441 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3442 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3443 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3446 dist_ref=
static_cast<data_type
>(0.1);
3447 u_ref=
static_cast<data_type
>(0.64)+u0;
3448 v_ref=
static_cast<data_type
>(0.32)+v0;
3449 norm=-pws.
normal(u_ref, v_ref);
3450 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3452 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3453 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3454 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3457 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3458 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3459 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3462 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3463 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3464 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3467 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3468 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3469 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3472 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3473 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3474 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3477 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3478 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3479 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3482 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3483 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3484 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3487 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3488 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3489 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3492 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3493 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3494 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3497 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3498 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3499 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3502 dist_ref=
static_cast<data_type
>(1.1);
3503 u_ref=
static_cast<data_type
>(0.64)+u0;
3504 v_ref=
static_cast<data_type
>(0.32)+v0;
3505 norm=pws.
normal(u_ref, v_ref);
3506 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3508 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3509 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3510 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3513 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3514 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3515 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3518 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3519 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3520 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3523 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3524 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3525 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3528 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3529 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3530 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3533 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3534 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3535 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3538 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3539 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3540 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3543 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3544 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3545 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3548 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3549 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3550 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3553 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3554 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3555 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3558 dist_ref=
static_cast<data_type
>(0.1);
3559 u_ref=
static_cast<data_type
>(0.01)+u0;
3560 v_ref=
static_cast<data_type
>(0.01)+v0;
3561 norm=pws.
normal(u_ref, v_ref);
3562 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3564 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3565 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3566 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3569 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3570 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3571 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3574 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3575 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3576 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3579 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3580 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3581 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3584 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3585 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3586 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3589 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3590 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3591 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3594 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3595 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3596 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3599 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3600 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3601 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3604 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3605 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3606 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3609 dist_ref=
static_cast<data_type
>(0.1);
3610 u_ref=
static_cast<data_type
>(0.99)+u0;
3611 v_ref=
static_cast<data_type
>(0.01)+v0;
3612 norm=pws.
normal(u_ref, v_ref);
3613 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3615 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3616 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3617 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3620 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3621 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3622 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3625 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3626 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3627 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3630 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3631 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3632 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3635 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3636 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3637 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3640 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3641 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3642 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3645 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3646 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3647 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3650 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3651 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3652 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3655 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3656 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3657 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3660 dist_ref=
static_cast<data_type
>(0.1);
3661 u_ref=
static_cast<data_type
>(0.01)+u0;
3662 v_ref=
static_cast<data_type
>(0.999)+v0;
3663 norm=pws.
normal(u_ref, v_ref);
3664 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3666 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3667 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3668 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3671 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3672 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3673 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3676 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3677 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3678 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3681 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3682 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3683 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3686 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3687 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3688 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3691 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3692 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3693 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3696 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3697 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3698 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3701 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3702 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3703 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3706 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3707 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3708 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3711 dist_ref=
static_cast<data_type
>(0.1);
3712 u_ref=
static_cast<data_type
>(0.999)+u0;
3713 v_ref=
static_cast<data_type
>(0.999)+v0;
3714 norm=pws.
normal(u_ref, v_ref);
3715 pt=pws.
f(u_ref, v_ref)+dist_ref*norm;
3717 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3718 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3719 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3722 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3723 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3724 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3727 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3728 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3729 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3732 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3733 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3734 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3737 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3738 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3739 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3742 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3743 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3744 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3747 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3748 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3749 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3752 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3753 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3754 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3757 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3758 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3759 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3762 dist_ref=
static_cast<data_type
>(0.1);
3763 u_ref=
static_cast<data_type
>(1)+u0;
3764 v_ref=
static_cast<data_type
>(0.4)+v0;
3765 norm=pws.
normal(u_ref, v_ref);
3766 u_contra=-norm.cross(pws.
f_v(u_ref, v_ref));
3767 u_contra.normalize();
3768 pt=
static_cast<data_type
>(0.01)*u_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
3771 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3772 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3773 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3776 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3777 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3778 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3781 data_type u_alt, v_alt, dist_alt;
3788 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3789 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3790 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3793 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3794 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3795 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3798 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3799 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3800 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3803 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3804 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3805 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3808 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3809 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3810 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3813 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3814 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3815 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3818 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3819 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3820 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3823 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3824 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3825 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3828 dist_ref=
static_cast<data_type
>(0.1);
3829 u_ref=
static_cast<data_type
>(0.6)+u0;
3830 v_ref=
static_cast<data_type
>(1)+v0;
3831 norm=pws.
normal(u_ref, v_ref);
3832 v_contra=norm.cross(pws.
f_u(u_ref, v_ref));
3833 v_contra.normalize();
3834 pt=
static_cast<data_type
>(0.01)*v_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
3837 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3838 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3839 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3842 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3843 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3844 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3853 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3854 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3855 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3858 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3859 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3860 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3863 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3864 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3865 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3868 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3869 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3870 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3873 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3874 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3875 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3878 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3879 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3880 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3883 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3884 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3885 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3888 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3889 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3890 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3893 dist_ref=
static_cast<data_type
>(0.5);
3894 u_ref=
static_cast<data_type
>(0)+u0;
3895 v_ref=
static_cast<data_type
>(0.2)+v0;
3896 norm=pws.
normal(u_ref, v_ref);
3897 u_contra=-norm.cross(pws.
f_v(u_ref, v_ref));
3898 u_contra.normalize();
3899 pt=
static_cast<data_type
>(-0.1)*u_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
3902 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3903 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3904 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3907 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3908 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3909 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3918 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3919 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3920 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3923 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3924 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3925 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3928 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3929 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3930 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3933 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3934 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3935 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3938 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3939 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3940 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3943 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3944 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3945 if (
typeid(data_type)==
typeid(float))
3947 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
3951 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3955 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3956 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3957 if (
typeid(data_type)==
typeid(float))
3959 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
3963 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3967 TEST_ASSERT(tol.approximately_equal(u, u_alt));
3968 TEST_ASSERT(tol.approximately_equal(v, v_alt));
3969 if (
typeid(data_type)==
typeid(float))
3971 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
3975 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
3979 dist_ref=
static_cast<data_type
>(0.5);
3980 u_ref=
static_cast<data_type
>(0.2)+u0;
3981 v_ref=
static_cast<data_type
>(0)+v0;
3982 norm=pws.
normal(u_ref, v_ref);
3983 v_contra=norm.cross(pws.
f_u(u_ref, v_ref));
3984 v_contra.normalize();
3985 pt=
static_cast<data_type
>(-0.1)*v_contra+pws.
f(u_ref, v_ref)+dist_ref*norm;
3988 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3989 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3990 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
3993 TEST_ASSERT(tol.approximately_equal(u, u_ref));
3994 TEST_ASSERT(tol.approximately_equal(v, v_ref));
3995 TEST_ASSERT(tol.approximately_equal(dist, dist_ref));
4004 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4005 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4006 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4009 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4010 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4011 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4014 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4015 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4016 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4019 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4020 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4021 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4024 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4025 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4026 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4029 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4030 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4031 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4034 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4035 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4036 if (
typeid(data_type)==
typeid(float))
4038 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
4042 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4046 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4047 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4048 if (
typeid(data_type)==
typeid(float))
4050 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
4054 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
4058 TEST_ASSERT(tol.approximately_equal(u, u_alt));
4059 TEST_ASSERT(tol.approximately_equal(v, v_alt));
4060 if (
typeid(data_type)==
typeid(float))
4062 TEST_ASSERT(std::abs(dist-dist_alt) < 2e-3);
4066 TEST_ASSERT(tol.approximately_equal(dist, dist_alt));
piecewise_surface_type::surface_type surface_type
Definition: minimum_distance_surface_test_suite.hpp:31
~minimum_distance_surface_test_suite()
Definition: minimum_distance_surface_test_suite.hpp:69
surface_type::index_type index_type
Definition: minimum_distance_surface_test_suite.hpp:33
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)
void point_piecewise_01_smooth_test()
Definition: minimum_distance_surface_test_suite.hpp:1810
Derived1__::Scalar distance(const Eigen::MatrixBase< Derived1__ > &p1, const Eigen::MatrixBase< Derived2__ > &p2)
Definition: distance.hpp:33
void point_smooth_test()
Definition: minimum_distance_surface_test_suite.hpp:204
void set_v0(const data_type &v0_in)
Definition: piecewise.hpp:137
eli::geom::surface::piecewise< eli::geom::surface::bezier, data_type, 3 > piecewise_surface_type
Definition: minimum_distance_surface_test_suite.hpp:30
point_type f_u(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:910
void set_u0(const data_type &u0_in)
Definition: piecewise.hpp:134
point_type f(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:897
surface_type::point_type point_type
Definition: minimum_distance_surface_test_suite.hpp:32
data__ data_type
Definition: minimum_distance_surface_test_suite.hpp:28
Definition: piecewise.hpp:37
surface_type::tolerance_type tolerance_type
Definition: minimum_distance_surface_test_suite.hpp:34
minimum_distance_surface_test_suite()
Definition: minimum_distance_surface_test_suite.hpp:65
void AddTests(const double &)
Definition: minimum_distance_surface_test_suite.hpp:47
error_code split_u(const data_type &u_in)
Definition: piecewise.hpp:582
void point_closed_test()
Definition: minimum_distance_surface_test_suite.hpp:1275
error_code split_v(const data_type &v_in)
Definition: piecewise.hpp:605
error_code
Definition: piecewise.hpp:69
void AddTests(const long double &)
Definition: minimum_distance_surface_test_suite.hpp:55
void octave_print(int figno, const std::vector< point_type > &pts, const surface_type &s) const
Definition: minimum_distance_surface_test_suite.hpp:74
void point_piecewise_trange_smooth_test()
Definition: minimum_distance_surface_test_suite.hpp:2940
Definition: piecewise.hpp:71
Definition: minimum_distance_surface_test_suite.hpp:25
point_type normal(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:1058
void AddTests(const float &)
Definition: minimum_distance_surface_test_suite.hpp:39
void init_uv(const index_type &nsegu, const index_type &nsegv, const data_type &du=1, const data_type &dv=1, const data_type &u0=0, const data_type &v0=0)
Definition: piecewise.hpp:219
surface__< data__, dim__, tol__ > surface_type
Definition: piecewise.hpp:57
error_code set(const surface_type &surf, const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:509
tolerance_type tol
Definition: minimum_distance_surface_test_suite.hpp:36
point_type f_v(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:926