30 #include <gtest/gtest.h> 34 TEST(GeometryUtilTests, ClosestPointToLinesInvalid)
53 tf::Vector3(10, 0, 0),
54 tf::Vector3(20, 0, 0),
55 tf::Vector3(30, 0, 0),
60 tf::Vector3(10, 0, 0),
61 tf::Vector3(30, 0, 0),
62 tf::Vector3(10, 0, 0),
67 tf::Vector3(10, 0, 0),
68 tf::Vector3(20, 10, 10),
69 tf::Vector3(30, 10, 10),
75 tf::Vector3(10, 0, 0),
76 tf::Vector3(30, 10, 10),
77 tf::Vector3(10, 10, 10),
86 tf::Vector3(10, 0, 0),
88 tf::Vector3(0, 10, 0),
90 EXPECT_FLOAT_EQ(point.x(), 0);
91 EXPECT_FLOAT_EQ(point.y(), 0);
92 EXPECT_FLOAT_EQ(point.z(), 0);
96 tf::Vector3(10, 0, 0),
98 tf::Vector3(0, 10, 0),
100 EXPECT_FLOAT_EQ(point.x(), 0);
101 EXPECT_FLOAT_EQ(point.y(), 0);
102 EXPECT_FLOAT_EQ(point.z(), 0);
105 tf::Vector3(5, 0, 0),
106 tf::Vector3(10, 0, 0),
107 tf::Vector3(0, 5, 0),
108 tf::Vector3(0, 10, 0),
110 EXPECT_FLOAT_EQ(point.x(), 0);
111 EXPECT_FLOAT_EQ(point.y(), 0);
112 EXPECT_FLOAT_EQ(point.z(), 0);
115 tf::Vector3(0, 0, 0),
116 tf::Vector3(10, 0, 0),
117 tf::Vector3(0, -5, 0),
118 tf::Vector3(0, 10, 0),
120 EXPECT_FLOAT_EQ(point.x(), 0);
121 EXPECT_FLOAT_EQ(point.y(), 0);
122 EXPECT_FLOAT_EQ(point.z(), 0);
125 tf::Vector3(0, 0, 0),
126 tf::Vector3(10, 0, 0),
127 tf::Vector3(0, 0, 20),
128 tf::Vector3(0, 10, 20),
130 EXPECT_FLOAT_EQ(point.x(), 0);
131 EXPECT_FLOAT_EQ(point.y(), 0);
132 EXPECT_FLOAT_EQ(point.z(), 10);
135 tf::Vector3(0, 0, 0),
136 tf::Vector3(10, 0, 0),
137 tf::Vector3(0, 10, 20),
138 tf::Vector3(0, 0, 20),
140 EXPECT_FLOAT_EQ(point.x(), 0);
141 EXPECT_FLOAT_EQ(point.y(), 0);
142 EXPECT_FLOAT_EQ(point.z(), 10);
145 TEST(GeometryUtilTests, ProjectPointToLineSegment3D)
147 tf::Vector3 p1(0, 0, 0);
148 tf::Vector3 p2(10, 0, 0);
149 tf::Vector3 p3(2, 0, 0);
151 EXPECT_FLOAT_EQ(p3.x(), p4.x());
152 EXPECT_FLOAT_EQ(p3.y(), p4.y());
153 EXPECT_FLOAT_EQ(p3.z(), p4.z());
156 EXPECT_FLOAT_EQ(p3.x(), p4.x());
157 EXPECT_FLOAT_EQ(p3.y(), p4.y());
158 EXPECT_FLOAT_EQ(p3.z(), p4.z());
160 p3 = tf::Vector3(0, 0, 0);
162 EXPECT_FLOAT_EQ(p3.x(), p4.x());
163 EXPECT_FLOAT_EQ(p3.y(), p4.y());
164 EXPECT_FLOAT_EQ(p3.z(), p4.z());
166 p3 = tf::Vector3(0, 1, 0);
168 EXPECT_FLOAT_EQ(0, p4.x());
169 EXPECT_FLOAT_EQ(0, p4.y());
170 EXPECT_FLOAT_EQ(0, p4.z());
172 p3 = tf::Vector3(5, -1, 0);
174 EXPECT_FLOAT_EQ(5, p4.x());
175 EXPECT_FLOAT_EQ(0, p4.y());
176 EXPECT_FLOAT_EQ(0, p4.z());
178 p3 = tf::Vector3(5, -1, 10);
180 EXPECT_FLOAT_EQ(5, p4.x());
181 EXPECT_FLOAT_EQ(0, p4.y());
182 EXPECT_FLOAT_EQ(0, p4.z());
184 p3 = tf::Vector3(-5, -1, 10);
186 EXPECT_FLOAT_EQ(0, p4.x());
187 EXPECT_FLOAT_EQ(0, p4.y());
188 EXPECT_FLOAT_EQ(0, p4.z());
190 p3 = tf::Vector3(15, -1, 10);
192 EXPECT_FLOAT_EQ(10, p4.x());
193 EXPECT_FLOAT_EQ(0, p4.y());
194 EXPECT_FLOAT_EQ(0, p4.z());
196 p1 = tf::Vector3(0, 0, 0);
197 p2 = tf::Vector3(10, 10, 10);
198 p3 = tf::Vector3(1, 1, 1);
200 EXPECT_FLOAT_EQ(1, p4.x());
201 EXPECT_FLOAT_EQ(1, p4.y());
202 EXPECT_FLOAT_EQ(1, p4.z());
204 p2 = tf::Vector3(10, 10, 0);
205 p3 = tf::Vector3(0, 10, 0);
207 EXPECT_FLOAT_EQ(5, p4.x());
208 EXPECT_FLOAT_EQ(5, p4.y());
209 EXPECT_FLOAT_EQ(0, p4.z());
212 EXPECT_FLOAT_EQ(5, p4.x());
213 EXPECT_FLOAT_EQ(5, p4.y());
214 EXPECT_FLOAT_EQ(0, p4.z());
216 p3 = tf::Vector3(-100, 10, 0);
218 EXPECT_FLOAT_EQ(0, p4.x());
219 EXPECT_FLOAT_EQ(0, p4.y());
220 EXPECT_FLOAT_EQ(0, p4.z());
223 TEST(GeometryUtilTests, ProjectPointToLineSegment2D)
229 EXPECT_FLOAT_EQ(p3[0], p4[0]);
230 EXPECT_FLOAT_EQ(p3[1], p4[1]);
233 EXPECT_FLOAT_EQ(p3[0], p4[0]);
234 EXPECT_FLOAT_EQ(p3[1], p4[1]);
236 p3 = cv::Vec2d(0, 0);
238 EXPECT_FLOAT_EQ(p3[0], p4[0]);
239 EXPECT_FLOAT_EQ(p3[1], p4[1]);
241 p3 = cv::Vec2d(0, 1);
243 EXPECT_FLOAT_EQ(0, p4[0]);
244 EXPECT_FLOAT_EQ(0, p4[1]);
246 p3 = cv::Vec2d(5, -1);
248 EXPECT_FLOAT_EQ(5, p4[0]);
249 EXPECT_FLOAT_EQ(0, p4[1]);
251 p3 = cv::Vec2d(-5, -1);
253 EXPECT_FLOAT_EQ(0, p4[0]);
254 EXPECT_FLOAT_EQ(0, p4[1]);
256 p3 = cv::Vec2d(15, -1);
258 EXPECT_FLOAT_EQ(10, p4[0]);
259 EXPECT_FLOAT_EQ(0, p4[1]);
261 p1 = cv::Vec2d(0, 0);
262 p2 = cv::Vec2d(10, 10);
263 p3 = cv::Vec2d(1, 1);
265 EXPECT_FLOAT_EQ(1, p4[0]);
266 EXPECT_FLOAT_EQ(1, p4[1]);
268 p2 = cv::Vec2d(10, 10);
269 p3 = cv::Vec2d(0, 10);
271 EXPECT_FLOAT_EQ(5, p4[0]);
272 EXPECT_FLOAT_EQ(5, p4[1]);
275 EXPECT_FLOAT_EQ(5, p4[0]);
276 EXPECT_FLOAT_EQ(5, p4[1]);
278 p3 = cv::Vec2d(-100, 10);
280 EXPECT_FLOAT_EQ(0, p4[0]);
281 EXPECT_FLOAT_EQ(0, p4[1]);
284 TEST(GeometryUtilTests, DistanceFromLineSegment3D)
286 tf::Vector3 p1(0, 0, 0);
287 tf::Vector3 p2(10, 0, 0);
288 tf::Vector3 p3(2, 0, 0);
292 p3 = tf::Vector3(0, 0, 0);
295 p3 = tf::Vector3(0, 1, 0);
298 p3 = tf::Vector3(5, -1, 0);
301 p3 = tf::Vector3(5, -1, 10);
304 p3 = tf::Vector3(-5, -1, 10);
307 p3 = tf::Vector3(15, -1, 10);
310 p1 = tf::Vector3(0, 0, 0);
311 p2 = tf::Vector3(10, 10, 10);
312 p3 = tf::Vector3(1, 1, 1);
315 p2 = tf::Vector3(10, 10, 0);
316 p3 = tf::Vector3(0, 10, 0);
320 p3 = tf::Vector3(-100, 10, 0);
324 TEST(GeometryUtilTests, DistanceFromLineSegment2D)
332 p3 = cv::Vec2d(0, 0);
335 p3 = cv::Vec2d(0, 1);
338 p3 = cv::Vec2d(5, -1);
341 p1 = cv::Vec2d(0, 0);
342 p2 = cv::Vec2d(10, 10);
343 p3 = cv::Vec2d(1, 1);
346 p2 = cv::Vec2d(10, 10);
347 p3 = cv::Vec2d(0, 10);
351 p3 = cv::Vec2d(-100, 10);
358 std::vector<cv::Vec2d> polygon1;
359 polygon1.push_back(cv::Vec2d(1, 1));
360 polygon1.push_back(cv::Vec2d(1, -1));
361 polygon1.push_back(cv::Vec2d(-1, -1));
362 polygon1.push_back(cv::Vec2d(-1, 1));
372 std::vector<cv::Vec2d> polygon2;
373 polygon2.push_back(cv::Vec2d(1, 1));
374 polygon2.push_back(cv::Vec2d(1, -1));
375 polygon2.push_back(cv::Vec2d(-1, -1));
376 polygon2.push_back(cv::Vec2d(-1, 1));
377 polygon2.push_back(cv::Vec2d(1, 1));
378 polygon2.push_back(cv::Vec2d(1, 1));
391 std::vector<cv::Vec2d> polygon1;
392 polygon1.push_back(cv::Vec2d(1, 1));
393 polygon1.push_back(cv::Vec2d(1, -1));
394 polygon1.push_back(cv::Vec2d(-1, -1));
395 polygon1.push_back(cv::Vec2d(-1, 1));
405 std::vector<cv::Vec2d> polygon2;
406 polygon2.push_back(cv::Vec2d(1, 1));
407 polygon2.push_back(cv::Vec2d(1, -1));
408 polygon2.push_back(cv::Vec2d(-1, -1));
409 polygon2.push_back(cv::Vec2d(-1, 1));
410 polygon2.push_back(cv::Vec2d(1, 1));
411 polygon2.push_back(cv::Vec2d(1, 1));
423 int main(
int argc,
char **argv)
425 testing::InitGoogleTest(&argc, argv);
427 return RUN_ALL_TESTS();
bool PointInPolygon(const std::vector< cv::Vec2d > &polygon, const cv::Vec2d &point)
double DistanceFromPolygon(const std::vector< cv::Vec2d > &polygon, const cv::Vec2d &point)
TEST(GeometryUtilTests, ClosestPointToLinesInvalid)
int main(int argc, char **argv)
tf::Vector3 ProjectToLineSegment(const tf::Vector3 &line_start, const tf::Vector3 &line_end, const tf::Vector3 &point)
bool ClosestPointToLines(const tf::Vector3 &a1, const tf::Vector3 &a2, const tf::Vector3 &b1, const tf::Vector3 &b2, tf::Vector3 &point)
double DistanceFromLineSegment(const tf::Vector3 &line_start, const tf::Vector3 &line_end, const tf::Vector3 &point)