我试图使用这个公式得到飞机上三个点之间的角度:
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是顶点 这可能会出错?
由于
答案 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
或略小于-1
至acos