CGAL一般多边形:刚性运动和区域

时间:2013-11-23 14:46:06

标签: c++ geometry transformation area cgal

调查this question,我将不得不处理边界由线段和圆弧组成的形状。似乎CGAL应该能够在这里帮助我:根据this section of the User's ManualGeneral_polygon_set_2 Gps_segment_traits_2作为其特征类应该能够表达我需要的大多数操作,特别是交叉点和差异。

到目前为止,我在文档中找不到的是将刚性运动应用于这些形状的方法,以及计算结果形状区域的方法。

我想我可以解决这两个问题。对于刚性运动,我可以在转换原始定义对象后重新创建形状。为了计算面积,我可以使用鞋带方法的变化,调整以应对圆弧。手册中的示例打印了有关支持圈的详细信息,并挖掘了我发现每个curve我的多边形的标题确实有supporting_circle()方法的标题,所以我猜它实际上是{{3 }}。所以我应该能够获得足够的圆形信息来计算面积。在使用有意的编译器错误消息后,我才在标题中找到这个,以了解手册简单描述为unspecified_type的某些对象的类型。

尽管如此,这两项操作都需要相当多的工作,我很惊讶似乎没有内置的方法可以做到这些。另一方面,CGAL通过模板参数进行自定义的方式,我可能只是错过了一种方法来做这些适用于圆形段的事情,尽管它可能不适用于其他一般多边形。你知道我可以使用的任何捷径吗?

1 个答案:

答案 0 :(得分:2)

我担心你不会喜欢我的回答。

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

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

关于区域计算,您的方法似乎是可行的。然而,我们需要在概念中要求这样的操作,因为那时我们需要为我们支持的所有特征类实现操作。我想,始终可以从一个开始,然后逐个添加它们。我会把它扔进我们的待办事项清单,但我不会把我的赌注快速交付......

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

祝你好运!

相关问题