我有一堆共面点定义了3D空间中的多边形。它们总是以相同的方式缠绕(例如顺时针方向)。我需要确定包含这个多边形的平面的有符号法线,即知道哪条路是" up"对于那个多边形。
这首先看起来很容易:取两条边(顶点差异)并计算叉积。但如果边缘碰巧是共线的(你会得到一个零幅度的交叉积),那就失败了。
然后我尝试走顶点列表,直到找到第二条边与第一条边形成一个相当大的角度。这在凸多边形上可靠地工作,但是如果我最终的两条边没有定义多边形内的三角形,它可能会失败(指向相反的方向)在非凸多边形上。 / p>
我知道如果我首先对多边形进行三角测量,那么我可以轻松可靠地检查任何三角形的面部......但问题是我的三角测量库需要知道平面正常。所以,鸡蛋必须在鸡肉之前来。
如何在非凸多边形中选取两条边(或三个顶点),以便可靠地定义多边形面向的方向?
答案 0 :(得分:3)
如果我是你,我会按照以下方式完成:
请注意,在步骤2之后,您的矢量具有正确的方向和正确的方向,其幅度为 2 S ,其中 S 是多边形的区域。这就是为什么它应该工作,除非你的多边形面积为零或几乎为零。
顺便说一下,这里使用的点C只是为了使位于远离原点的小多边形更加精确。您可以选择 C = 0 ,从计算中有效地将其删除。
答案 1 :(得分:0)
sum of consecutive cross products不够健壮。例如,请参见Robust polygon normal calculation。
一个可靠的解决方案是找到所有i,j,(i
答案 2 :(得分:-1)
计算三维多边形中的三个signed areas,这三个多边形是将3D多边形投影到XY,YZ和ZX平面上,从而为您提供所需的法线。