Revision 99234880c948e558ef2eb77fbbfc02271a62dfb4 authored by Sébastien Loriot on 02 January 2017, 18:10:24 UTC, committed by Sébastien Loriot on 02 January 2017, 18:10:24 UTC
Triangulation_2: Reduce code by switching to Prevent_deref
AlgorithmTest.cpp
#include <CGAL/Cartesian.h>
#include <CGAL/Homogeneous.h>
#include <CGAL/Polygon_2_algorithms.h>
#include <fstream>
#include <vector>
#include <cstdlib>
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 <class R, class Point>
void test_polygon(const R&, const Point&, const char* FileName)
{
typedef typename std::vector<Point>::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<Point> polygon;
from >> point;
std::copy(std::istream_iterator<Point>(from),
std::istream_iterator<Point>(),
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<Point>(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<double> R1;
typedef CGAL::Point_2<R1> 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<double> R2;
typedef CGAL::Point_2<R2> Point2;
test_polygon(R2(), Point2(), "data/polygon_homogeneous.dat");
return 0;
}
Computing file changes ...