Булевы операции на обобщенных многоугольниках с отрезками окружности в качестве ребер - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно работать с обобщенными полигонами, где ребра - это не только отрезки, но и отрезки окружности, и могут возникнуть отверстия. Поэтому я решил использовать

CGAL Булевы операции над множествами

с настройкой:

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2                                   Point_2;
typedef Kernel::Circle_2                                  Circle_2;
typedef Kernel::Line_2                                    Line_2;
typedef CGAL::Gps_circle_segment_traits_2<Kernel>         Traits_2;

typedef CGAL::General_polygon_set_2<Traits_2>             Polygon_set_2;
typedef Traits_2::General_polygon_2                       Polygon_2;
typedef Traits_2::General_polygon_with_holes_2            Polygon_with_holes_2;
typedef Traits_2::Curve_2                                 Curve_2;
typedef Traits_2::X_monotone_curve_2                      X_monotone_curve_2;
typedef Traits_2::Point_2                                 Point_2t;
typedef Traits_2::CoordNT                                 coordnt;
typedef CGAL::Arrangement_2<Traits_2>                     Arrangement_2;
typedef Arrangement_2::Face_handle                        Face_handle;

Мне нужно вычислить объединения большого числа полигонов (примерно до 200 000) и вычтите из таких союзов снова до 100 000-200 000 полигонов. Так что скорость - важная проблема. В приведенной выше настройке используется точное ядро, где числовой тип Point_2t имеет вид a0 + a1 sqrt (root), где a0, a1, root - рациональные числа. Чтобы ускорить процесс, я попытался скомпилировать все с помощью CGAL::Kernel<double>, но это привело к ошибкам утверждения в коде CGAL. ​​

Верно ли, что логические операции с полигонами делают точные ядро числового типа необходимо и не может работать с неточными CGAL::Kernel<double>?

Если нет возможности для дальнейшего ускорения в этой библиотеке CGAL:

Есть ли еще (C ++) - библиотека для работы с обобщенными полигонами (имеющими также сегменты круга в качестве ребер) и вычисления логических операций над ними, что быстрее? (Например, потому что он использует только двойные значения в качестве значений координат точки?)

...