以圆弧段为边的广义多边形的布尔运算

时间:2020-03-30 17:48:47

标签: polygon computational-geometry cgal

我需要使用广义多边形,其中边缘不仅是线段,而且是圆线段,并且可能会出现孔。所以我决定使用

CGAL Boolean set operations

使用设置:

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 ++)库,用于处理广义多边形(也将圆弧段作为边缘)并在其上计算布尔运算,这更快? (例如,因为它仅使用双值作为点坐标值?)

0 个答案:

没有答案