我有2个多边形,A和B.
每个多边形都是闭合的,并且是凹的。多边形的每个边缘都有一个相关的法线(蓝色/绿色),面向内部或外部。每个多边形顶点的缠绕顺序是任意的,与法线的方向无关。
仅使用每个多边形的法线和顶点,如何确定多边形的周长是朝向外(A)还是向内(B)?理想情况下,我正在寻找一种不涉及任何光线投射或交叉测试的解决方案。
答案 0 :(得分:1)
我想我找到了一个解决方案,到目前为止,在我的测试中它始终会返回正确的结果。
首先,我使用此处答案中描述的求和方法确定多边形的绕线顺序:
How to determine if a list of polygon points are in clockwise order?
然后我通过找到方向向量和向量[0,0,1]的叉积,然后对其进行归一化来手动计算第一条边的法线。由于这些是2d多边形,[0,0,1](其中z是向上轴)将始终垂直于任何边缘的方向,因此叉积将始终返回有效法线。如果整个多边形是逆时针的,则重要的部分是将得到的法线乘以-1。由于交叉产品的右手规则,这将给我们一个始终向外的正常,无论蜿蜒的顺序。
最后,我计算手动计算的法线和第一边缘的指定法线(原始图像的蓝色/绿色法线)的点积...如果点积是> 0,我们指定的法线(因此我们的多边形)是朝外的,否则它是朝内的。这只需要对多边形的第一条边进行,因为所有法线都是向外或向内。