Geometry 求多边形的内角

Geometry 求多边形的内角,geometry,computational-geometry,Geometry,Computational Geometry,我有一些线,它们的交点描述了一个多边形,如下所示: 我知道这些线的顺序和它们的方程式 为了找到内角,我找到了每条线的方向。但我有点困惑,因为减去两条直线的方向会得到两个不同的角度,即使我按照多边形边的顺序来做 例如,在下图中,如果我只减去直线的方向,我将得到以下任何角度: 让我更困惑的是,当多边形不是凸多边形时,我的角度将大于180,使用我的方法,我根本无法获得正确的角度: 我发现这种解决问题的方法是错误的 那么,仅使用线来计算内角的最佳方法是什么呢?我知道对于凸多边形,我可能会找到向量,

我有一些线,它们的交点描述了一个多边形,如下所示:

我知道这些线的顺序和它们的方程式

为了找到内角,我找到了每条线的方向。但我有点困惑,因为减去两条直线的方向会得到两个不同的角度,即使我按照多边形边的顺序来做

例如,在下图中,如果我只减去直线的方向,我将得到以下任何角度:

让我更困惑的是,当多边形不是凸多边形时,我的角度将大于180,使用我的方法,我根本无法获得正确的角度:

我发现这种解决问题的方法是错误的

那么,仅使用线来计算内角的最佳方法是什么呢?我知道对于凸多边形,我可能会找到向量,然后找到它们之间的角度,但即使对于我的例子中的P6,向量方法也失败了

无论如何,我更喜欢一种方法,它不包含解决凹度问题的条件情况


谢谢。

使用有序线,可以按顺时针顺序找到交点(多边形顶点)。然后可以计算内角:

Angle[i] =  Pi + ArcTan2(V[i] x V[i+1], V[i] * V[i+1]) 
(每个顶点的输入向量和输出向量的叉积和点积)

注:将
Pi
后面的加号改为负表示逆时针方向

编辑:

请注意,叉积和点积是标量,而不是向量

您的数据示例:

dx1 = 5; dy1 = -15; dx2 = -15; dy2 = 5

Angle = Pi + ArcTan2(5*5-15*15, -5*15-5*15) = Pi - 2.11 radians ~ 59 degrees
向量示例:

(0,-1) (1,0) (L-curve)

Angle = Pi + ArcTan2(1, 0) =  270 degrees

你知道多边形遍历的方向(如顺时针方向)吗?你的线是如何描述的?是的,我知道方向,我有一组顺时针顺序的线。这些行用两点来描述。非常感谢您的回答。关于ArcTan2的参数,有一点我不明白,如果第二个参数是dotproduct,怎么可能用一个数字和一个向量来表示ArcTan2呢?如果可能的话,请考虑用这两个向量来说明计算:v[i]=(5,-15)和v[i+2]=(-15/5)。再次感谢,请阅读。叉积返回与多边形所在平面垂直的向量。因为|更重要的是,您的方法只适用于2D情况,并且需要对3D中定义的多边形进行坐标变换,我保证这会很混乱。因此,更通用的方法是使用叉积的大小,而不仅仅是结果向量的
z
-分量(这是您的方法隐式执行的)。
(0,-1) (1,0) (L-curve)

Angle = Pi + ArcTan2(1, 0) =  270 degrees