如何确定封闭的凹面多边形是否在里面? [关闭]

问题描述 投票:1回答:1

我有2个多边形,A和B.

每个多边形都是闭合的,凹陷的。多边形的每个边缘都有一个相关的法线(蓝色/绿色),面向内部或外部。每个多边形顶点的缠绕顺序是任意的,与法线的方向无关。

仅使用每个多边形的法线和顶点,如何确定多边形的周长是朝向外(A)还是向内(B)?理想情况下,我正在寻找一种不涉及任何光线投射或交叉测试的解决方案。

Polygons

c++ geometry polygon direction
1个回答
1
投票

我想我找到了一个解决方案,到目前为止,在我的测试中它始终返回正确的结果。

首先,我使用此处答案中描述的求和方法确定多边形的缠绕顺序:

How to determine if a list of polygon points are in clockwise order?

然后我通过找到方向向量和向量[0,0,1]的叉积,然后对其进行归一化来手动计算第一条边的法线。由于这些是2d多边形,[0,0,1](其中z是向上轴)将始终垂直于任何边的方向,因此叉积将始终返回有效法线。如果整个多边形是逆时针的,则重要的部分是将得到的法线乘以-1。由于交叉产品的右手规则,这将给我们一个始终向外的正常,无论蜿蜒的顺序。

最后,我计算了手动计算的法线和第一条边的指定法线(原始图像的蓝色/绿色法线)的点积...如果点积> 0,我们指定的法线(因此我们的多边形)是朝外的,否则它是朝内的。这只需要对多边形的第一条边进行,因为所有法线都是向外或向内。

© www.soinside.com 2019 - 2024. All rights reserved.