调查这个问题,我将处理边界由线段和圆弧组成的形状。看起来CGAL应该能够帮助我:根据用户手册的这一部分,具有
Gps_segment_traits_2
作为其特征类的General_polygon_set_2
应该能够表达我需要的大部分操作,尤其是交集和差异。
到目前为止,我在文档中没有找到一种方法可以对这些形状应用刚性运动,并计算结果形状的面积。
我想我可以解决这两个问题。对于刚性运动,我可以在转换原始定义对象后重新创建形状。而要计算面积,我可以使用变化式的鞋带法,调整以处理圆弧。手册中的示例打印支持圆的详细信息,并且通过挖掘头文件,我发现我的多边形的每个曲线确实具有supporting_circle()
方法,因此我猜它实际上是一个Arr_circle_segment_traits_2<K>::X_monotone_curve_2
。因此,我应该能够获得足够的圆信息来计算面积。在手册中,一些对象只被描述为unspecified_type
,我使用故意的编译器错误消息来了解一些对象的类型,才找到了这个。
然而,这两个操作都需要相当多的工作,我很惊讶似乎没有内置的方法来完成这些操作。另一方面,CGAL通过模板参数进行自定义的方式,我可能只是错过了一种适用于圆弧段但可能不适用于其他一般多边形的方法。您知道我可以使用的任何快捷方式吗?
Epick
内核,并将一个根点简单地转换为双精度。目前,我正在认真考虑从头开始实现这个布尔运算。但也许有些开发人员可以帮助我,至少概述如何扩展CAGL以满足我的需求。 - MvG