mirror of https://github.com/CGAL/cgal
Enhanced with unit tests tha test removal of edges in arrangements that have isolated vertices
This commit is contained in:
parent
9bfaa542d8
commit
511dfe7ea1
|
|
@ -17,6 +17,99 @@ typedef Arrangement_2::Halfedge_handle Halfedge_handle;
|
|||
#define N_SEGMENTS 26
|
||||
#define N_REMOVE 10
|
||||
|
||||
Halfedge_handle construct_arr(Arrangement_2& arr)
|
||||
{
|
||||
arr.clear();
|
||||
Segment_2 seg;
|
||||
seg = Segment_2(Point_2(0, 0), Point_2(2, 0));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
seg = Segment_2(Point_2(2, 4), Point_2(0, 4));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
seg = Segment_2(Point_2(0, 4), Point_2(0, 0));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
seg = Segment_2(Point_2(2, 0), Point_2(4, 0));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
seg = Segment_2(Point_2(4, 0), Point_2(4, 4));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
seg = Segment_2(Point_2(4, 4), Point_2(2, 4));
|
||||
insert_non_intersecting_curve(arr, seg);
|
||||
|
||||
seg = Segment_2(Point_2(2, 0), Point_2(2, 4));
|
||||
return insert_non_intersecting_curve(arr, seg);
|
||||
}
|
||||
|
||||
/* (1)
|
||||
* ------------- -------------
|
||||
* | | | | |
|
||||
* | | o | => | o |
|
||||
* | | | | |
|
||||
* ------------- -------------
|
||||
*/
|
||||
bool test1()
|
||||
{
|
||||
Arrangement_2 arr;
|
||||
Halfedge_handle he = construct_arr(arr);
|
||||
insert_point(arr, Point_2(3, 2));
|
||||
arr.remove_edge(he);
|
||||
return arr.is_valid();
|
||||
}
|
||||
|
||||
/* (2)
|
||||
* ------------- -------------
|
||||
* | o | | | o |
|
||||
* | | o | => | o |
|
||||
* | o | | | o |
|
||||
* ------------- -------------
|
||||
*/
|
||||
bool test2()
|
||||
{
|
||||
Arrangement_2 arr;
|
||||
Halfedge_handle he = construct_arr(arr);
|
||||
insert_point(arr, Point_2(1, 1));
|
||||
insert_point(arr, Point_2(1, 3));
|
||||
insert_point(arr, Point_2(3, 2));
|
||||
arr.remove_edge(he);
|
||||
return arr.is_valid();
|
||||
}
|
||||
|
||||
/* (3)
|
||||
* ------------- -------------
|
||||
* | | o | | o |
|
||||
* | o | | => | o |
|
||||
* | | o | | o |
|
||||
* ------------- -------------
|
||||
*/
|
||||
bool test3()
|
||||
{
|
||||
Arrangement_2 arr;
|
||||
Halfedge_handle he = construct_arr(arr);
|
||||
insert_point(arr, Point_2(1, 2));
|
||||
insert_point(arr, Point_2(3, 1));
|
||||
insert_point(arr, Point_2(3, 3));
|
||||
arr.remove_edge(he);
|
||||
return arr.is_valid();
|
||||
}
|
||||
|
||||
/* (4)
|
||||
* ------------- -------------
|
||||
* | o | o | | o |
|
||||
* | o | | => | o |
|
||||
* | o | o | | o |
|
||||
* ------------- -------------
|
||||
*/
|
||||
bool test4()
|
||||
{
|
||||
Arrangement_2 arr;
|
||||
Halfedge_handle he = construct_arr(arr);
|
||||
insert_point(arr, Point_2(1, 1));
|
||||
insert_point(arr, Point_2(1, 2));
|
||||
insert_point(arr, Point_2(1, 3));
|
||||
insert_point(arr, Point_2(3, 1));
|
||||
insert_point(arr, Point_2(3, 3));
|
||||
arr.remove_edge(he);
|
||||
return arr.is_valid();
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
// Construct the initial arrangement.
|
||||
|
|
@ -52,7 +145,7 @@ int main ()
|
|||
segs[23] = Segment_2 (Point_2 (13, 3), Point_2 (17, 3));
|
||||
segs[24] = Segment_2 (Point_2 (12, 6), Point_2 (13, 3));
|
||||
segs[25] = Segment_2 (Point_2 (17, 3), Point_2 (20, 1));
|
||||
|
||||
|
||||
for (k = 0; k < N_SEGMENTS; k++)
|
||||
{
|
||||
hhs[k] = insert_non_intersecting_curve (arr, segs[k]);
|
||||
|
|
@ -61,11 +154,11 @@ int main ()
|
|||
|
||||
std::cout << "Arrangement size:"
|
||||
<< " V = " << arr.number_of_vertices()
|
||||
<< ", E = " << arr.number_of_edges()
|
||||
<< ", E = " << arr.number_of_edges()
|
||||
<< ", F = " << arr.number_of_faces() << std::endl;
|
||||
std::cout << "The arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
|
||||
|
||||
if (! valid)
|
||||
return (1);
|
||||
|
||||
|
|
@ -85,14 +178,33 @@ int main ()
|
|||
|
||||
std::cout << "Final arrangement size:"
|
||||
<< " V = " << arr.number_of_vertices()
|
||||
<< ", E = " << arr.number_of_edges()
|
||||
<< ", E = " << arr.number_of_edges()
|
||||
<< ", F = " << arr.number_of_faces() << std::endl;
|
||||
|
||||
// Check the validity more thoroughly.
|
||||
valid = is_valid(arr);
|
||||
std::cout << "Arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
valid = test1();
|
||||
std::cout << "The arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
if (!valid) return 1;
|
||||
|
||||
valid = test2();
|
||||
std::cout << "The arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
if (!valid) return 1;
|
||||
|
||||
valid = test3();
|
||||
std::cout << "The arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
if (!valid) return 1;
|
||||
|
||||
valid = test4();
|
||||
std::cout << "The arrangement is "
|
||||
<< (valid ? "valid." : "NOT valid!") << std::endl;
|
||||
if (!valid) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue