#include #include #include #include #include using namespace std; typedef float TestNum; #ifdef USE_CARTESIAN_COORDINATES typedef Cartesian R_type; #else typedef Homogeneous R_type; #endif typedef CGAL::Point_2 Point_2; typedef CGAL::Segment_2 Segment_2; typedef list< Point_2 > Container; typedef CGAL::Polygon_traits_2 Polygon_traits_2; typedef CGAL::Polygon_2< Polygon_traits_2, Container > Polygon_2; typedef vector Input_container; int example_intersection( const Input_container& container_A, const Input_container& container_B ) { /* instantiate Polygon A and B with containers */ Polygon_2 A(container_A.begin(), container_A.end()); Polygon_2 B(container_B.begin(), container_B.end()); /* declaration of the result container */ list result; /* performing intersection of A and B */ intersection(A, B, back_inserter(result)); cout << "result size=" << result.size() << endl; /* possible results */ Point_2 point; Segment_2 segment; Polygon_2 polygon; list::const_iterator it; for( it= result.begin(); it != result.end(); it++) { if( assign( polygon, *it) ) { cout << "PGN: " << polygon << endl; /* polygon detected */ } else if( assign( segment, *it) ) { cout << "SEG: " << segment << endl; /* segment detected */ } else if( assign( point, *it) ) { cout << "PNT:" << point << endl; /* point detected */ } else { cout << "undefined object " << endl; /* nothing detected */ } } return result.size(); } int main(void) { Input_container container_A(6), container_B(4); container_A[0]= Point_2(2,4); /* description of polygon A */ container_A[1]= Point_2(0,3); container_A[2]= Point_2(1,1); container_A[3]= Point_2(2,3); container_A[4]= Point_2(3,1); container_A[5]= Point_2(4,3); container_B[0]= Point_2(0,2); /* description of polygon B */ container_B[1]= Point_2(0,0); container_B[2]= Point_2(5,0); container_B[3]= Point_2(5,2); example_intersection( container_A, container_B); return 0; }