1717 * this program. If not, see <http://www.gnu.org/licenses/>.
1818 */
1919
20+ #include " polygon_coverage_geometry/visibility_polygon.h"
21+
22+ #include < CGAL/intersections.h>
2023#include < CGAL/is_y_monotone_2.h>
2124#include < gtest/gtest.h>
2225
2326#include " polygon_coverage_geometry/cgal_comm.h"
2427#include " polygon_coverage_geometry/test_comm.h"
25- #include " polygon_coverage_geometry/visibility_polygon.h"
2628
2729using namespace polygon_coverage_planning ;
2830
@@ -32,79 +34,72 @@ TEST(VisibilityPolygonTest, computeVisibilityPolygon) {
3234 Polygon_2 visibility_polygon;
3335
3436 // Query on polygon vertex.
35- Point_2 query (0.0 , 0. 0 );
37+ Point_2 query (0 , 0 );
3638 EXPECT_TRUE (computeVisibilityPolygon (rectangle_in_rectangle, query,
3739 &visibility_polygon));
3840 // Result manually checked.
39- VertexConstIterator vit = visibility_polygon.vertices_begin ();
40- EXPECT_EQ (static_cast <size_t >(9 ), visibility_polygon.size ());
41- EXPECT_EQ (Point_2 (0.0 , 2.0 ), *vit++);
42- EXPECT_EQ (Point_2 (0.0 , 0.0 ), *vit++);
43- EXPECT_EQ (Point_2 (2.0 , 0.0 ), *vit++);
44- EXPECT_EQ (Point_2 (2.0 , 2.0 ), *vit++);
45- vit++; // Skip inexact point. (1.6,2)
46- EXPECT_EQ (Point_2 (1.0 , 1.25 ), *vit++);
47- EXPECT_EQ (Point_2 (0.5 , 1.25 ), *vit++);
48- EXPECT_EQ (Point_2 (0.5 , 1.75 ), *vit++);
49- vit++; // Skip inexact point. (0.571429,2)
41+ Line_2 line (Point_2 (0 , 2 ), Point_2 (2 , 2 ));
42+ Ray_2 ray_1 (Point_2 (0 , 0 ), Point_2 (0.5 , 1.75 ));
43+ Ray_2 ray_2 (Point_2 (0 , 0 ), Point_2 (1.0 , 1.25 ));
44+ auto inter_1 = CGAL::intersection (ray_1, line);
45+ auto inter_2 = CGAL::intersection (ray_2, line);
46+
47+ Point_2 points_1[] = {{0 , 2 },
48+ {0 , 0 },
49+ {2 , 0 },
50+ {2 , 2 },
51+ *boost::get<Point_2>(&*inter_2),
52+ {1 , 1.25 },
53+ {0.5 , 1.25 },
54+ {0.5 , 1.75 },
55+ *boost::get<Point_2>(&*inter_1)};
56+ Polygon_2 visibility_polygon_expected_1 (
57+ points_1, points_1 + sizeof (points_1) / sizeof (points_1[0 ]));
58+ EXPECT_EQ (visibility_polygon_expected_1, visibility_polygon);
5059
5160 // Query on hole vertex.
52- query = Point_2 (1.0 , 1.25 );
61+ query = Point_2 (1 , 1.25 );
5362 EXPECT_TRUE (computeVisibilityPolygon (rectangle_in_rectangle, query,
5463 &visibility_polygon));
55- vit = visibility_polygon.vertices_begin ();
56- EXPECT_EQ (static_cast <size_t >(6 ), visibility_polygon.size ())
57- << " Query point: " << query << " PWH: " << rectangle_in_rectangle
58- << " Visibility: " << visibility_polygon;
59- EXPECT_EQ (Point_2 (1 , 1.25 ), *vit++);
60- EXPECT_EQ (Point_2 (0 , 1.25 ), *vit++);
61- EXPECT_EQ (Point_2 (0 , 0 ), *vit++);
62- EXPECT_EQ (Point_2 (2 , 0 ), *vit++);
63- EXPECT_EQ (Point_2 (2 , 2 ), *vit++);
64- EXPECT_EQ (Point_2 (1 , 2 ), *vit++);
64+ Point_2 points_2[] = {{0 , 0 }, {2 , 0 }, {2 , 2 }, {1 , 2 }, {1 , 1.25 }, {0 , 1.25 }};
65+ Polygon_2 visibility_polygon_expected_2 (
66+ points_2, points_2 + sizeof (points_2) / sizeof (points_2[0 ]));
67+ EXPECT_EQ (visibility_polygon_expected_2, visibility_polygon);
6568
6669 // Query in face.
67- query = Point_2 (1.0 , 0.5 );
70+ query = Point_2 (1 , 0.5 );
6871 EXPECT_TRUE (computeVisibilityPolygon (rectangle_in_rectangle, query,
6972 &visibility_polygon));
7073 // Result manually checked.
71- vit = visibility_polygon.vertices_begin ();
72- EXPECT_EQ (static_cast <size_t >(7 ), visibility_polygon.size ());
73- EXPECT_EQ (Point_2 (0 , 0 ), *vit++);
74- EXPECT_EQ (Point_2 (2 , 0 ), *vit++);
75- EXPECT_EQ (Point_2 (2 , 2 ), *vit++);
76- EXPECT_EQ (Point_2 (1 , 2 ), *vit++);
77- EXPECT_EQ (Point_2 (1 , 1.25 ), *vit++);
78- EXPECT_EQ (Point_2 (0.5 , 1.25 ), *vit++);
79- EXPECT_EQ (Point_2 (0 , 2 ), *vit++);
74+ Point_2 points_3[] = {{0 , 0 }, {2 , 0 }, {2 , 2 }, {1 , 2 },
75+ {1 , 1.25 }, {0.5 , 1.25 }, {0 , 2 }};
76+ Polygon_2 visibility_polygon_expected_3 (
77+ points_3, points_3 + sizeof (points_3) / sizeof (points_3[0 ]));
78+ EXPECT_EQ (visibility_polygon_expected_3, visibility_polygon);
8079
8180 // Query on polygon halfedge.
82- query = Point_2 (1.0 , 0. 0 );
81+ query = Point_2 (1 , 0 );
8382 EXPECT_TRUE (computeVisibilityPolygon (rectangle_in_rectangle, query,
8483 &visibility_polygon));
8584 // Result manually checked.
86- vit = visibility_polygon.vertices_begin ();
87- EXPECT_EQ (static_cast <size_t >(8 ), visibility_polygon.size ());
88- EXPECT_EQ (Point_2 (0 , 2 ), *vit++);
89- EXPECT_EQ (Point_2 (0 , 0 ), *vit++);
90- EXPECT_EQ (Point_2 (2 , 0 ), *vit++);
91- EXPECT_EQ (Point_2 (2 , 2 ), *vit++);
92- EXPECT_EQ (Point_2 (1 , 2 ), *vit++);
93- EXPECT_EQ (Point_2 (1 , 1.25 ), *vit++);
94- EXPECT_EQ (Point_2 (0.5 , 1.25 ), *vit++);
95- // EXPECT_EQ(Point_2(0.2, 2), *vit++); Skip inexact.
85+ Ray_2 ray_3 (Point_2 (1 , 0 ), Point_2 (0.5 , 1.25 ));
86+ auto inter_3 = CGAL::intersection (ray_3, line);
87+ Point_2 points_4[] = {
88+ {0 , 2 }, {0 , 0 }, {2 , 0 }, {2 , 2 },
89+ {1 , 2 }, {1 , 1.25 }, {0.5 , 1.25 }, *boost::get<Point_2>(&*inter_3)};
90+ Polygon_2 visibility_polygon_expected_4 (
91+ points_4, points_4 + sizeof (points_4) / sizeof (points_4[0 ]));
92+ EXPECT_EQ (visibility_polygon_expected_4, visibility_polygon);
9693
9794 // Query on hole halfedge.
9895 query = Point_2 (0.75 , 1.25 );
9996 EXPECT_TRUE (computeVisibilityPolygon (rectangle_in_rectangle, query,
10097 &visibility_polygon));
10198 // Result manually checked.
102- vit = visibility_polygon.vertices_begin ();
103- EXPECT_EQ (static_cast <size_t >(4 ), visibility_polygon.size ());
104- EXPECT_EQ (Point_2 (2 , 1.25 ), *vit++);
105- EXPECT_EQ (Point_2 (0 , 1.25 ), *vit++);
106- EXPECT_EQ (Point_2 (0 , 0 ), *vit++);
107- EXPECT_EQ (Point_2 (2 , 0 ), *vit++);
99+ Point_2 points_5[] = {{2 , 1.25 }, {0 , 1.25 }, {0 , 0 }, {2 , 0 }};
100+ Polygon_2 visibility_polygon_expected_5 (
101+ points_5, points_5 + sizeof (points_5) / sizeof (points_5[0 ]));
102+ EXPECT_EQ (visibility_polygon_expected_5, visibility_polygon);
108103}
109104
110105int main (int argc, char ** argv) {
0 commit comments