CGAL терпит неудачу с операцией вставки в двумерных соглашениях - PullRequest
0 голосов
/ 24 апреля 2018

Когда я переключился на CGAL 4.12-бета2 с CGAL-4.4, я получил следующее исключение

Exception: CGAL ERROR: precondition violation!
Expr: (m_traits.compare_y_at_x_2_object()(p, cv) == EQUAL) && compare_xy(cv.left(), p) == SMALLER && compare_xy(cv.right(), p) == LARGER
File: D:\PE\PE_Software\3rdParty\CGAL\CGAL-4.12-beta2\include\CGAL/Arr_segment_traits_2.h
Line: 714

Любая помощь приветствуется

Ниже приведена функция частичного тестирования, которая может воспроизвести эту ошибку. В этом случае 4 строки, одна из которых пересекает две из них.

typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef Kernel::FT                                        Number_type;

typedef CGAL::Arr_segment_traits_2<Kernel>              Traits;
typedef Traits::Point_2                                 Point;
typedef Traits::X_monotone_curve_2                      Segment;

typedef CGAL::Arrangement_2<Traits>                     Arrangement;
typedef Arrangement::Vertex_handle                      Vertex_handle;
typedef Arrangement::Halfedge_handle                    Halfedge_handle;
typedef Arrangement::Face_handle                        Face_handle;
typedef Arrangement::Vertex_const_handle                Vertex_const_handle;
typedef Arrangement::Halfedge_const_handle              Halfedge_const_handle;


typedef CGAL::Arr_consolidated_curve_data_traits_2<Traits, int>
    Data_traits;
typedef Data_traits::Curve_2                               Numbered_segment;
typedef CGAL::Arrangement_2<Data_traits>                   Numbered_arr;

Numbered_arr   arr;

insert(arr, Numbered_segment(Segment(Point(1.6831200000000E+02,-1.3992000000000E+01), Point(    1.2253100000000E+02,    -2.0889000000000E+01)), 6));
insert(arr, Numbered_segment(Segment(Point(1.6490200000000E+02, 1.0314000000000E+01), Point(    1.0342400000000E+02,    4.2850000000000E+00)), 11));
insert(arr, Numbered_segment(Segment(Point(1.7217000000000E+02,-3.2611000000000E+01), Point(    9.9756000000000E+01,    -4.3728000000000E+01)), 16));
insert(arr, Numbered_segment(Segment(Point(1.4197300000000E+02, 5.4490000000000E+00), Point(    1.4887000000000E+02,    -4.0331000000000E+01)), 51));
...