CGAL通用多边形:刚性运动和面积

CGAL general polygons: rigid motions and area

本文关键字:运动 多边形 CGAL      更新时间:2023-10-16

为了研究这个问题,我必须处理边界由线段和圆弧组成的形状。CGAL似乎应该能够在这里帮助我:根据用户手册的这一部分,以Gps_segment_traits_2为特征类的General_polygon_set_2应该能够表达我需要的大多数操作,特别是交集和差异。

到目前为止,我在文档中还没有找到一种将刚性运动应用于这些形状的方法,以及一种计算结果形状面积的方法

我想我可以解决这两个问题。对于刚性运动,我可以在变换原始定义对象后重新创建形状。为了计算面积,我可以使用鞋带的各种方法,根据圆弧进行调整。手册中的例子打印了关于支撑圆的详细信息,在标题中挖掘,我发现多边形的每条曲线都有一个supporting_circle()方法,所以我猜它实际上是Arr_circle_segment_traits_2<K>::X_monotone_curve_2。所以我应该能够得到足够的圆信息来计算面积。我只是在使用故意的编译器错误消息来了解一些对象的类型后才在标题中发现这一点,手册只是将这些对象简单地描述为unspecified_type

尽管如此,这两项操作都需要相当多的工作,我很惊讶似乎没有内置的方法来完成这些操作。另一方面,CGAL通过模板参数进行自定义的方式,我可能只是缺少了一种对圆形线段有效的方法,尽管它可能不适用于其他通用多边形。你知道我能用什么快捷方式吗?

恐怕你不会喜欢我的答案。

我是CGAL的开发人员,实际上是Reg.布尔运算和Arrangement包的开发人员之一。

首先,您要求的操作不受支持。

关于面积计算,你的方法似乎是可行的。然而,对我们来说,在概念中要求这样的操作将是一项巨大的努力,因为这样我们就需要为我们支持的所有特性类实现操作。我想,总是有可能从一个开始,然后一个接一个地添加它们。我会把它列入我们的待办事项清单,但我不会把赌注押在快速交付上。。。

关于转型,答案更为复杂。正如您已经注意到的,将非精确变换应用于(精确的)几何形状(例如,排列、一般多边形集,甚至是小型线性简单凸多边形)可能是有害的。你必须想出一个精确的变换,例如,一个由精确类型的数字组成的变换矩阵——与用于表示几何元素(精确)坐标的类型相同(或至少可以相互转换)。问题自然是旋转,因为你通常从一个角度开始,并使用三角函数(例如sin()和cos())来计算旋转矩阵。假设你想旋转一个给定的角度,比如阿尔法。你需要计算阿尔法的近似值,这样sin(阿尔法)和cos(阿尔法)就是有理数,因此可以用前面提到的精确类型的数字来表示。自由函数CGAL::rational_reation_approximation()可以提供帮助。如该函数的手动输入中所述,近似基于Farey序列,如Canny和Ressler在1992年第8届SoCG上提出的有理旋转方法中所述。

祝你好运!