Python 三点夹角

Python 三点夹角,python,geometry,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 :

我试图用这个公式得到平面上三个点之间的角度:

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是顶点 这里会出什么问题


谢谢

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

乙二醇

给予

P12 = 140.007142675 
P13 = 2.82842712475
P23 = 142.8355698


这是由于浮点错误造成的,您最终会将一个略大于
1
或略小于
-1
的数字传递给
acos

,有时我会收到一个数学域异常。您的意思是星期日中午之前或输入具有这些特征时@高性能标记-很好。。我没有产生这种行为的具体输入。因为它每几千次只发生一次,所以函数被调用。我添加了一个try-Exception块来打印这些内容,并将在我拥有它们时发布,但可能需要一段时间。
P12 = 140.007142675 
P13 = 2.82842712475
P23 = 142.8355698
>>> (P12**2 + P13**2 - P23**2) / (2*P12*P13)
-1.0000000000901725