1 // Some tests for vgl_line_segment_3d
2 // J.L. Mundy July 2009
3
4 #include <iostream>
5 #include <sstream>
6 #ifdef _MSC_VER
7 # include "vcl_msvc_warnings.h"
8 #endif
9 #include "testlib/testlib_test.h"
10 #include "vgl/vgl_infinite_line_3d.h"
11 #include "vgl/vgl_distance.h"
12
13
14 static void
test_constructor()15 test_constructor()
16 {
17 vgl_vector_3d<double> t(0, 0, 2);
18 vgl_point_3d<double> p(1, 2, 3);
19 vgl_infinite_line_3d<double> inf_l(p, t);
20 vgl_vector_2d<double> x0 = inf_l.x0();
21 vgl_vector_3d<double> dir = inf_l.direction();
22 TEST_NEAR("Constructor from point and dir - compare x0", x0.x() + x0.y(), 3.0, 1e-5);
23 TEST_NEAR("Constructor from point and dir - compare dir", dir.z_, 1.0, 1e-5);
24 vgl_point_3d<double> p1(1, 2, 4);
25 vgl_infinite_line_3d<double> inf_l1(p, p1);
26 x0 = inf_l1.x0();
27 dir = inf_l1.direction();
28 TEST_NEAR("Constructor from point-point - compare x0", x0.x() + x0.y(), 3.0, 1e-5);
29 TEST_NEAR("Constructor from point-point - compare dir", dir.z_, 1.0, 1e-5);
30 }
31
32 static void
test_operations()33 test_operations()
34 {
35 {
36 vgl_vector_3d<double> t(0, 0, 1);
37 vgl_point_3d<double> p(1, 2, 3), p0, pt;
38 vgl_infinite_line_3d<double> inf_l(p, t);
39 p0 = inf_l.point();
40 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(1, 2, 0)), 0, 1e-6);
41 pt = inf_l.point_t(1.0);
42 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 2, 1)), 0, 1e-6);
43 vgl_point_3d<double> x(1.0, 2.0, -3.0);
44 bool con = inf_l.contains(x);
45 TEST("Contains ", con, true);
46 }
47
48 {
49 vgl_vector_3d<double> t(1, 0, 0);
50 vgl_point_3d<double> p(1, 2, 3), p0, pt;
51 vgl_infinite_line_3d<double> inf_l(p, t);
52 p0 = inf_l.point();
53 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(0, 2, 3)), 0, 1e-6);
54 pt = inf_l.point_t(1.0);
55 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 2, 3)), 0, 1e-6);
56 vgl_point_3d<double> x(-1.0, 2.0, 3.0);
57 bool con = inf_l.contains(x);
58 TEST("Contains ", con, true);
59 }
60
61 {
62 vgl_vector_3d<double> t(0, 1, 0);
63 vgl_point_3d<double> p(1, 2, 3), p0, pt;
64 vgl_infinite_line_3d<double> inf_l(p, t);
65 p0 = inf_l.point();
66 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(1, 0, 3)), 0, 1e-6);
67 pt = inf_l.point_t(1.0);
68 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 1, 3)), 0, 1e-6);
69 vgl_point_3d<double> x(1.0, -2.0, 3.0);
70 bool con = inf_l.contains(x);
71 TEST("Contains ", con, true);
72 }
73
74 {
75 vgl_vector_3d<double> t(0, 0, -1);
76 vgl_point_3d<double> p(1, 2, 3), p0, pt;
77 vgl_infinite_line_3d<double> inf_l(p, t);
78 p0 = inf_l.point();
79 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(1, 2, 0)), 0, 1e-6);
80 pt = inf_l.point_t(1.0);
81 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 2, 1)), 0, 1e-6);
82 vgl_point_3d<double> x(1.0, 2.0, -3.0);
83 bool con = inf_l.contains(x);
84 TEST("Contains ", con, true);
85 }
86
87 {
88 vgl_vector_3d<double> t(-1, 0, 0);
89 vgl_point_3d<double> p(1, 2, 3), p0, pt;
90 vgl_infinite_line_3d<double> inf_l(p, t);
91 p0 = inf_l.point();
92 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(0, 2, 3)), 0, 1e-6);
93 pt = inf_l.point_t(1.0);
94 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 2, 3)), 0, 1e-6);
95 vgl_point_3d<double> x(-1.0, 2.0, 3.0);
96 bool con = inf_l.contains(x);
97 TEST("Contains ", con, true);
98 }
99
100 {
101 vgl_vector_3d<double> t(0, -1, 0);
102 vgl_point_3d<double> p(1, 2, 3), p0, pt;
103 vgl_infinite_line_3d<double> inf_l(p, t);
104 p0 = inf_l.point();
105 TEST_NEAR("Closest point to origin", vgl_distance(p0, vgl_point_3d<double>(1, 0, 3)), 0, 1e-6);
106 pt = inf_l.point_t(1.0);
107 TEST_NEAR("Parametric point ", vgl_distance(pt, vgl_point_3d<double>(1, 1, 3)), 0, 1e-6);
108 vgl_point_3d<double> x(1.0, -2.0, 3.0);
109 bool con = inf_l.contains(x);
110 TEST("Contains ", con, true);
111 }
112 {
113 vgl_vector_3d<double> t(0, 1, 0);
114 vgl_point_3d<double> p(1, 2, 3);
115 vgl_infinite_line_3d<double> inf_l(p, t), in_inf_l;
116 std::stringstream ss;
117 ss << inf_l;
118 std::cout << " infl as writen to stream " << inf_l << std::endl;
119 ss >> in_inf_l;
120 std::cout << "infl members as read from stream " << in_inf_l.x0() << ' ' << in_inf_l.direction() << std::endl;
121 TEST("stream read ", inf_l == in_inf_l, true);
122 }
123 }
124 void
test_infinite_line_3d()125 test_infinite_line_3d()
126 {
127 std::cout << "*****************************\n"
128 << " Testing vgl_infinite_line_3d\n"
129 << "*****************************\n\n";
130
131 test_constructor();
132 test_operations();
133 }
134
135
136 TESTMAIN(test_infinite_line_3d);
137