格雷厄姆在3D中扫描,找到一般多边形的区域

时间:2012-06-28 05:48:17

标签: c computational-geometry

我的目标是找到具有n个多个顶点的3d平面多边形的无符号区域,给定多边形的无序顶点以及平面的方程。我已经有一个有效的算法来计算一旦点按顺时针或逆时针顺序排列的区域(来自这个网站:http://softsurfer.com/Archive/algorithm_0101/algorithm_0101.htm#3D%20Polygons

我决定实施格雷厄姆的扫描来重新排序这些点,有很多例子可以用于2d情况,但对于3d来说并不多。我认为我最好的选择是要么使用变换矩阵将3d点转换为2d(我不确定如何做到这一点),要么使用十字产品在3d中确定3点是否形成逆时针转弯。我认为后者会更有效率,因为我可以对每个交叉产品的面积求和,并在重新排序点时计算最终答案。

但是我仍然不确定如何在3d中实现格雷厄姆的扫描。另外,我是否可以使用这样一个事实:我已经知道顶点组是共面的,并且它们都必须包含在凸包中以便我使用?

编辑:进一步考虑,我甚至需要在这里使用格雷厄姆的扫描吗?我已经知道所有的点都包含在船体中,所以不会按角度对它们进行排序吗?最终目标是以逆时针/顺时针顺序排列点,以便可以计算区域,我认为扫描是完成该操作所必需的。

1 个答案:

答案 0 :(得分:2)

所有点线不能与所有主轴平行的平面,因此找到与平面不平行的平面并投影其中的所有点(比如牛)。

当投影方向与平面不平行时,没有两个点会交换位置或重合。现在在2D情况下执行凸包 - 您已经知道如何做到这一点。另外由于我之前的陈述,3D中的点的顺序将与投影点的顺序相同 - 没有增加复杂性和相同的算法。

编辑:当然任何其他投影都可以,但是因为与主轴之一平行投影非常容易(只需删除一个坐标)我建议这种方法。