6

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

主多边形

我知道线条的顺序和它们的方程式。

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

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

缺陷1

让我更困惑的是,当多边形不是凸面时,我的角度会大于 180,并且使用我的方法我根本没有得到正确的角度:

缺陷 2

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

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

无论如何,我更喜欢一种不包括解决该凹面问题的条件案例的方法。

谢谢。

4

1 回答 1

9

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

Angle[i] =  Pi + ArcTan2(V[i] x V[i+1], V[i] * V[i+1]) 

(每个顶点的传入和传出向量的叉积和点积)

或者

Angle[i] = Pi + ArcTan2( dx_in*dy_out-dx_out*dy_in, dx_in*dx_out+dy_in*dy_out2 )

注意:将加号后面的加号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
于 2012-08-23T11:40:39.660 回答