我有一些行,他们的交集描述了一个多边形,如下所示:
我知道线的顺序及其方程式。
为了找到内部角度,我找到了每条线的方向。但是我很困惑,因为减去两条线的方向会产生两个不同的角度,即使我是按照多边形的顺序进行的。
例如,在下图中,如果我只是减去线条的方向,我会得到以下任何一个角度:
让我更困惑的是,当多边形不凸出时,我的角度大于180,并且使用我的方法我根本得不到正确的角度:
我发现这种解决问题的方法是错误的。
那么,使用只是行找到内部角度的最佳方法是什么?我知道对于凸多边形,我可能会找到向量然后找到它们之间的角度,但即使对于我的例子中的P6,向量方法也会失败。
无论如何,我更喜欢一种不会包含解决这种凹凸问题的条件案例的方法。
感谢。
答案 0 :(得分:6)
对于有序线,可以按顺时针顺序找到交点(多边形顶点)。然后你可以计算内角:
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
之后将加号更改为减去逆时针方向。
编辑:
请注意,crossproduct和dotproduct是标量,而不是向量。
您的数据示例:
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