mirror of https://github.com/CGAL/cgal
Enhanced to test intersection with (non x-monotone) curves
This commit is contained in:
parent
30e5d27ffc
commit
f1b82b9dcc
|
|
@ -8,47 +8,49 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
typedef CGAL::Quotient<int> Number_type;
|
using Number_type = CGAL::Quotient<int>;
|
||||||
typedef CGAL::Simple_cartesian<Number_type> Kernel;
|
using Kernel = CGAL::Simple_cartesian<Number_type>;
|
||||||
typedef CGAL::Arr_segment_traits_2<Kernel> Traits_2;
|
using Traits_2 = CGAL::Arr_segment_traits_2<Kernel>;
|
||||||
typedef Traits_2::Point_2 Point_2;
|
using Point_2 = Traits_2::Point_2;
|
||||||
typedef Traits_2::X_monotone_curve_2 Segment_2;
|
using Segment_2 = Traits_2::X_monotone_curve_2;
|
||||||
typedef CGAL::Arrangement_2<Traits_2> Arrangement_2;
|
using Arrangement_2 = CGAL::Arrangement_2<Traits_2>;
|
||||||
typedef Arrangement_2::Halfedge_handle Halfedge_handle;
|
using Halfedge_handle = Arrangement_2::Halfedge_handle;
|
||||||
|
|
||||||
#define N_SEGMENTS 3
|
int main () {
|
||||||
|
Arrangement_2 arr;
|
||||||
|
using Tt = Arrangement_2::Topology_traits;
|
||||||
|
Tt::Default_point_location_strategy def_pl(arr);
|
||||||
|
|
||||||
int main ()
|
Segment_2 segs[] = {
|
||||||
{
|
Segment_2(Point_2(-2, -2), Point_2(-1, -1)),
|
||||||
Arrangement_2 arr;
|
Segment_2(Point_2(-1, 1), Point_2(0, 1)),
|
||||||
Segment_2 segs[N_SEGMENTS];
|
Segment_2(Point_2(-1, 0), Point_2(0, 0))
|
||||||
bool expected_intersect[N_SEGMENTS];
|
};
|
||||||
int k;
|
|
||||||
|
|
||||||
segs[0] = Segment_2 (Point_2 (-2, -2), Point_2 (-1, -1));
|
bool expected_intersect[] = {false, true, true};
|
||||||
segs[1] = Segment_2 (Point_2 (-1, 1), Point_2 (0, 1));
|
|
||||||
segs[2] = Segment_2 (Point_2 (-1, 0), Point_2 (0, 0));
|
|
||||||
|
|
||||||
expected_intersect[0] = false;
|
|
||||||
expected_intersect[1] = true;
|
|
||||||
expected_intersect[2] = true;
|
|
||||||
|
|
||||||
insert(arr, Segment_2(Point_2(0, 0), Point_2(2, 0)));
|
insert(arr, Segment_2(Point_2(0, 0), Point_2(2, 0)));
|
||||||
insert(arr, Segment_2(Point_2(2, 0), Point_2(2, 2)));
|
insert(arr, Segment_2(Point_2(2, 0), Point_2(2, 2)));
|
||||||
insert(arr, Segment_2(Point_2(2, 2), Point_2(0, 2)));
|
insert(arr, Segment_2(Point_2(2, 2), Point_2(0, 2)));
|
||||||
insert(arr, Segment_2(Point_2(0, 2), Point_2(0, 0)));
|
insert(arr, Segment_2(Point_2(0, 2), Point_2(0, 0)));
|
||||||
|
|
||||||
for (k = 0; k < N_SEGMENTS; k++)
|
size_t k = 0;
|
||||||
{
|
for (const auto& seg : segs) {
|
||||||
bool do_inter = do_intersect(arr, segs[k]);
|
bool do_inter_0 = do_intersect(arr, seg);
|
||||||
|
bool do_inter_1 = do_intersect(arr, seg, def_pl, std::true_type());
|
||||||
|
bool do_inter_2 = do_intersect(arr, seg, def_pl, std::false_type());
|
||||||
|
|
||||||
std::cout << "Segment: " << segs[k];
|
std::cout << "Segment: " << segs[k] << std::endl;
|
||||||
std::cout << " Expected: " << expected_intersect[k];
|
std::cout << " Expected: " << expected_intersect[k] << std::endl;
|
||||||
std::cout << " Actual: " << do_inter << std::endl;
|
std::cout << " Actual auto: " << do_inter_0 << std::endl;
|
||||||
|
std::cout << " Actual x-monotone curve: " << do_inter_1 << std::endl;
|
||||||
|
std::cout << " Actual curve: " << do_inter_2 << std::endl;
|
||||||
|
|
||||||
if (expected_intersect[k] != do_inter)
|
if (expected_intersect[k] != do_inter_0) return -1;
|
||||||
return (1);
|
if (expected_intersect[k] != do_inter_1) return -1;
|
||||||
|
if (expected_intersect[k] != do_inter_2) return -1;
|
||||||
|
++k;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue