我需要使用广义多边形,其中边缘不仅是线段,而且是圆线段,并且可能会出现孔。所以我决定使用
使用设置:
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 ++)库,用于处理广义多边形(也将圆弧段作为边缘)并在其上计算布尔运算,这更快? (例如,因为它仅使用双值作为点坐标值?)