三点之间的角度

时间:2014-10-21 05:58:40

标签: python geometry

我试图使用这个公式得到飞机上三个点之间的角度:

cos-1((P122 + P132 - P232)/(2 * P12 * P13))

但偶尔我会得到一个数学域异常。这是功能:

P12 = math.sqrt((x1-x2)**2 + (y1-y2)**2)
P13 = math.sqrt((x1-x3)**2 + (y1-y3)**2)
P23 = math.sqrt((x2-x3)**2 + (y2-y3)**2)

if P12 ==0 or P23 ==0 or P13 ==0 :
    return 0
return math.acos((P12**2 + P13**2 - P23**2) / (2*P12*P13) )

其中P1是顶点 这可能会出错?

由于

1 个答案:

答案 0 :(得分:2)

当点是共线的(或者可能非常接近共线)时,有时会出现此错误

例如

(-1,-1),(1,1),(100,100)

给出

P12 = 140.007142675 
P13 = 2.82842712475
P23 = 142.8355698

>>> (P12**2 + P13**2 - P23**2) / (2*P12*P13)
-1.0000000000901725

由于浮点错误导致您最终传递的数字略大于1或略小于-1acos

相关问题