python - 三点之间的角度

标签 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,-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/

相关文章:

python - OpenCV findContours仅间歇性地工作

python - 来自两个列表的数字对

r - 求多边形外接圆的半径

php - 将 K 个共面点旋转到平行于 x,y 平面的平面

math - 在给定初始和最终位置以及起始速度向量的情况下,在 3d 空间中查找路径上的点

python - 如何将 opencv Mat 类型传递给 Python 并取回数组?

python - django v1.10 mysite.com 的 urls.py 条目 :8000/index. html

python - 使用 OpenCv 检测图像上的文本并计算使用的面积

java - Swing 绘制在不正确的坐标上

opengl - OpenGL立方体贴图中的面约定