我正在尝试使用以下公式获取平面上三点之间的角度:
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,-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
关于python - 三点之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479826/