#include #include #include #include #include #include using std::cout; using std::endl; //------------------------------------------------------------------------------// // test the polygon algorithms for a specific choice of the // representation class R and the point class Point //------------------------------------------------------------------------------// template void test_polygon(const R&, const Point&, const char* FileName) { typedef typename std::vector::iterator iterator; // read a point and a polygon from the file 'FileName' std::ifstream from(FileName); if (!from) { std::cerr << "could not open file " << FileName << "!" << endl; std::exit(1); } CGAL::set_ascii_mode(from); Point point; std::vector polygon; from >> point; std::copy(std::istream_iterator(from), std::istream_iterator(), std::back_inserter(polygon) ); // show the point and the polygon cout << "point: " << point << endl; cout << "polygon:" << endl; std::copy(polygon.begin(), polygon.end(), std::ostream_iterator(cout, "\n")); cout << endl; iterator left = CGAL::left_vertex_2(polygon.begin(), polygon.end()); iterator right = CGAL::right_vertex_2(polygon.begin(), polygon.end()); iterator top = CGAL::top_vertex_2(polygon.begin(), polygon.end()); iterator bottom = CGAL::bottom_vertex_2(polygon.begin(), polygon.end()); bool simple = CGAL::is_simple_2(polygon.begin(), polygon.end()); bool convex = CGAL::is_convex_2(polygon.begin(), polygon.end()); CGAL::Bbox_2 bbox = CGAL::bbox_2(polygon.begin(), polygon.end(), R()); typename R::FT area = 0, area2; CGAL::area_2(polygon.begin(), polygon.end(), area, R()); area2 = CGAL::polygon_area_2(polygon.begin(), polygon.end(), R()); CGAL::Bounded_side bside = CGAL::bounded_side_2(polygon.begin(), polygon.end(), point); CGAL::Oriented_side oside = CGAL::oriented_side_2(polygon.begin(), polygon.end(), point); CGAL::Orientation orientation = CGAL::orientation_2(polygon.begin(), polygon.end()); cout << "left = " << *left << endl; cout << "right = " << *right << endl; cout << "top = " << *top << endl; cout << "bottom = " << *bottom << endl; cout << "the polygon is "; if (!simple) cout << "not "; cout << "simple" << endl; cout << "the polygon is "; if (!convex) cout << "not "; cout << "convex" << endl; cout << "the bounding box is " << bbox << endl; cout << "the area is " << area << endl; if (area != area2) cout << "but according to polygon_area_2 it is " << area2 << endl; switch (bside) { case CGAL::ON_BOUNDED_SIDE: cout << "the point is on bounded side" << endl; break; case CGAL::ON_BOUNDARY: cout << "the point is on the boundary" << endl; break; case CGAL::ON_UNBOUNDED_SIDE: cout << "the point is on the unbounded side" << endl; break; } switch (oside) { case CGAL::ON_NEGATIVE_SIDE: cout << "the point is on the negative side" << endl; break; case CGAL::ON_ORIENTED_BOUNDARY: cout << "the point is on the oriented boundary" << endl; break; case CGAL::ON_POSITIVE_SIDE: cout << "the point is on the positive side" << endl; break; } switch(orientation) { case CGAL::CLOCKWISE: cout << "the orientation is clockwise" << endl; break; case CGAL::COUNTERCLOCKWISE: cout << "the orientation is counter clockwise" << endl; break; case CGAL::COLLINEAR: cout << "the orientation is collinear" << endl; break; } } //-----------------------------------------------------------------------// // main //-----------------------------------------------------------------------// int main() { CGAL::set_pretty_mode(cout); cout << endl; cout << "--------------------------------------------------------" << endl; cout << "- testing polygon algorithms with cartesian/double -" << endl; cout << "--------------------------------------------------------" << endl; cout << endl; typedef CGAL::Cartesian R1; typedef CGAL::Point_2 Point1; test_polygon(R1(), Point1(), "data/polygon_cartesian.dat"); cout << endl; cout << "--------------------------------------------------------" << endl; cout << "- testing polygon algorithms with homogeneous/double -" << endl; cout << "--------------------------------------------------------" << endl; cout << endl; typedef CGAL::Homogeneous R2; typedef CGAL::Point_2 Point2; test_polygon(R2(), Point2(), "data/polygon_homogeneous.dat"); return 0; }