15 #include <gtest/gtest.h> 23 #include <geometry_msgs/Point.h> 25 TEST(CGUtilTest, IntersectTest1)
27 geometry_msgs::Point p1, p2, p3, p4, p5, p6, p7, p8;
28 std::array<geometry_msgs::Point, 2> e1, e2, e3, e4;
29 std::vector<std::array<geometry_msgs::Point, 2> > segments;
57 segments.push_back(e1);
58 segments.push_back(e2);
59 segments.push_back(e3);
60 segments.push_back(e4);
62 std::vector<std::array<std::array<geometry_msgs::Point, 2>, 2> > intersecting_segments = intersect(segments);
63 EXPECT_EQ(1, intersecting_segments.size());
64 EXPECT_DOUBLE_EQ(p3.x, intersecting_segments.at(0).at(0).at(0).x);
65 EXPECT_DOUBLE_EQ(p3.y, intersecting_segments.at(0).at(0).at(0).y);
66 EXPECT_DOUBLE_EQ(p4.x, intersecting_segments.at(0).at(0).at(1).x);
67 EXPECT_DOUBLE_EQ(p4.y, intersecting_segments.at(0).at(0).at(1).y);
68 EXPECT_DOUBLE_EQ(p7.x, intersecting_segments.at(0).at(1).at(0).x);
69 EXPECT_DOUBLE_EQ(p7.y, intersecting_segments.at(0).at(1).at(0).y);
70 EXPECT_DOUBLE_EQ(p8.x, intersecting_segments.at(0).at(1).at(1).x);
71 EXPECT_DOUBLE_EQ(p8.y, intersecting_segments.at(0).at(1).at(1).y);
74 TEST(CGUtilTest, IntersectTest2)
76 geometry_msgs::Point p1, p2, p3, p4;
77 std::array<geometry_msgs::Point, 2> e1, e2;
99 EXPECT_TRUE(intersect(e1, e2));
121 EXPECT_TRUE(intersect(e1, e2));
143 EXPECT_FALSE(intersect(e1, e2));
146 TEST(CGUtilTest, InBetweenTest)
148 geometry_msgs::Point p1, p2, p3;
161 EXPECT_TRUE(inBetween(p1, p2, p3));
174 EXPECT_FALSE(inBetween(p1, p2, p3));
187 EXPECT_TRUE(inBetween(p1, p2, p3));
193 TEST(CGUtilTest, CalcDistanceTest)
200 std::array<geometry_msgs::Point, 2> edge;
201 geometry_msgs::Point e1, e2, vertex;
213 EXPECT_NEAR(0.5, distance(edge, vertex), 1.0e-5);
230 EXPECT_NEAR(0.5, distance(edge, vertex), 1.0e-5);
247 EXPECT_NEAR(1.0, distance(edge, vertex), 1.0e-5);
264 EXPECT_NEAR(0.5, distance(edge, vertex), 1.0e-5);
278 vertex.x = 2.0 / 3.0;
279 vertex.y = 1.0 / 3.0;
281 EXPECT_NEAR(0.596284794, distance(edge, vertex), 1.0e-5);
298 EXPECT_NEAR(0.3535533906, distance(edge, vertex), 1.0e-5);
315 EXPECT_NEAR(1.5, distance(edge, vertex), 1.0e-5);
321 TEST(CGUtilTest, CalcVertexAngleTest)
323 geometry_msgs::Point p1, p2, p3;
336 EXPECT_DOUBLE_EQ(M_PI_4, vertexAngle(p1, p2, p3));
349 EXPECT_DOUBLE_EQ(0.0, vertexAngle(p1, p2, p3));
362 EXPECT_DOUBLE_EQ(M_PI_2, vertexAngle(p1, p2, p3));
375 EXPECT_DOUBLE_EQ(3 * M_PI_4, vertexAngle(p1, p2, p3));
387 p3.y = std::sqrt(3.0) / 2.0;
388 EXPECT_DOUBLE_EQ(2 * M_PI / 3.0, vertexAngle(p1, p2, p3));
399 p3.x = -std::sqrt(3.0) / 2.0;
401 EXPECT_DOUBLE_EQ(5 * M_PI / 6.0, vertexAngle(p1, p2, p3));
414 EXPECT_DOUBLE_EQ(0.0, vertexAngle(p1, p2, p3));
420 TEST(CGUtilTest, CalcHorizontalAngleTest)
422 geometry_msgs::Point p1, p2;
432 EXPECT_DOUBLE_EQ(0, horizontalAngle(p1, p2));
442 EXPECT_DOUBLE_EQ(M_PI_4, horizontalAngle(p1, p2));
451 p2.y = std::sqrt(3) / 2.0;
452 EXPECT_DOUBLE_EQ(2 * M_PI / 3, horizontalAngle(p1, p2));
462 EXPECT_DOUBLE_EQ(M_PI_2, horizontalAngle(p1, p2));
472 EXPECT_DOUBLE_EQ(0.0, horizontalAngle(p1, p2));
478 TEST(CGUtilTest, CalcsignedAreaTest)
480 geometry_msgs::Point p1, p2, p3;
493 EXPECT_DOUBLE_EQ(1.0, signedArea(p1, p2, p3));
506 EXPECT_DOUBLE_EQ(-1.0, signedArea(p1, p2, p3));
519 EXPECT_DOUBLE_EQ(-5.0, signedArea(p1, p2, p3));
532 EXPECT_DOUBLE_EQ(0.0, signedArea(p1, p2, p3));
538 TEST(CGUtilTest, GrahamScanTest)
540 geometry_msgs::Point p1, p2, p3, p4, p5, p6, p7;
541 std::vector<geometry_msgs::Point> points, convex_hull;
561 points.push_back(p1);
562 points.push_back(p2);
563 points.push_back(p3);
564 points.push_back(p4);
565 points.push_back(p5);
567 convex_hull = grahamScan(points);
569 EXPECT_DOUBLE_EQ(p1.x, convex_hull.at(0).x);
570 EXPECT_DOUBLE_EQ(p1.y, convex_hull.at(0).y);
571 EXPECT_DOUBLE_EQ(p2.x, convex_hull.at(1).x);
572 EXPECT_DOUBLE_EQ(p2.y, convex_hull.at(1).y);
573 EXPECT_DOUBLE_EQ(p3.x, convex_hull.at(2).x);
574 EXPECT_DOUBLE_EQ(p3.y, convex_hull.at(2).y);
575 EXPECT_DOUBLE_EQ(p4.x, convex_hull.at(3).x);
576 EXPECT_DOUBLE_EQ(p4.y, convex_hull.at(3).y);
577 EXPECT_DOUBLE_EQ(p5.x, convex_hull.at(4).x);
578 EXPECT_DOUBLE_EQ(p5.y, convex_hull.at(4).y);
603 points.push_back(p1);
604 points.push_back(p2);
605 points.push_back(p3);
606 points.push_back(p4);
607 points.push_back(p5);
608 points.push_back(p6);
610 convex_hull = grahamScan(points);
612 EXPECT_DOUBLE_EQ(p1.x, convex_hull.at(0).x);
613 EXPECT_DOUBLE_EQ(p1.y, convex_hull.at(0).y);
614 EXPECT_DOUBLE_EQ(p5.x, convex_hull.at(1).x);
615 EXPECT_DOUBLE_EQ(p5.y, convex_hull.at(1).y);
616 EXPECT_DOUBLE_EQ(p4.x, convex_hull.at(2).x);
617 EXPECT_DOUBLE_EQ(p4.y, convex_hull.at(2).y);
618 EXPECT_DOUBLE_EQ(p6.x, convex_hull.at(3).x);
619 EXPECT_DOUBLE_EQ(p6.y, convex_hull.at(3).y);
620 EXPECT_DOUBLE_EQ(p2.x, convex_hull.at(4).x);
621 EXPECT_DOUBLE_EQ(p2.y, convex_hull.at(4).y);
649 points.push_back(p1);
650 points.push_back(p2);
651 points.push_back(p3);
652 points.push_back(p4);
653 points.push_back(p5);
654 points.push_back(p6);
655 points.push_back(p7);
657 convex_hull = grahamScan(points);
659 EXPECT_DOUBLE_EQ(p1.x, convex_hull.at(0).x);
660 EXPECT_DOUBLE_EQ(p1.y, convex_hull.at(0).y);
661 EXPECT_DOUBLE_EQ(p2.x, convex_hull.at(1).x);
662 EXPECT_DOUBLE_EQ(p2.y, convex_hull.at(1).y);
663 EXPECT_DOUBLE_EQ(p3.x, convex_hull.at(2).x);
664 EXPECT_DOUBLE_EQ(p3.y, convex_hull.at(2).y);
665 EXPECT_DOUBLE_EQ(p6.x, convex_hull.at(3).x);
666 EXPECT_DOUBLE_EQ(p6.y, convex_hull.at(3).y);
667 EXPECT_DOUBLE_EQ(p7.x, convex_hull.at(4).x);
668 EXPECT_DOUBLE_EQ(p7.y, convex_hull.at(4).y);
675 convex_hull = grahamScan(points);
677 EXPECT_TRUE(convex_hull.empty());
687 points.push_back(p1);
689 convex_hull = grahamScan(points);
691 EXPECT_TRUE(convex_hull.empty());
704 points.push_back(p1);
705 points.push_back(p2);
707 convex_hull = grahamScan(points);
709 EXPECT_TRUE(convex_hull.empty());
725 points.push_back(p1);
726 points.push_back(p2);
727 points.push_back(p3);
729 convex_hull = grahamScan(points);
731 EXPECT_TRUE(convex_hull.empty());
750 points.push_back(p1);
751 points.push_back(p2);
752 points.push_back(p3);
753 points.push_back(p4);
755 convex_hull = grahamScan(points);
757 EXPECT_DOUBLE_EQ(p1.x, convex_hull.at(0).x);
758 EXPECT_DOUBLE_EQ(p1.y, convex_hull.at(0).y);
759 EXPECT_DOUBLE_EQ(p3.x, convex_hull.at(1).x);
760 EXPECT_DOUBLE_EQ(p3.y, convex_hull.at(1).y);
761 EXPECT_DOUBLE_EQ(p4.x, convex_hull.at(2).x);
762 EXPECT_DOUBLE_EQ(p4.y, convex_hull.at(2).y);
767 TEST(CGUtilTest, IsConvexTest1)
769 geometry_msgs::Point p1, p2, p3, p4, p5;
770 std::vector<geometry_msgs::Point> points;
790 points.push_back(p1);
791 points.push_back(p2);
792 points.push_back(p3);
793 points.push_back(p4);
794 points.push_back(p5);
799 TEST(CGUtilTest, IsConvexTest2)
801 geometry_msgs::Point p1, p2, p3, p4, p5;
802 std::vector<geometry_msgs::Point> points;
819 points.push_back(p1);
820 points.push_back(p2);
821 points.push_back(p3);
822 points.push_back(p4);
827 int main(
int argc,
char** argv)
829 ::testing::InitGoogleTest(&argc, argv);
830 return RUN_ALL_TESTS();
TEST(CGUtilTest, IntersectTest1)
bool isConvex(PointVector points)
Checks if given polygon is convex or not.
int main(int argc, char **argv)