gpt4 book ai didi

python - 计算python中两个向量之间的角度

转载 作者:太空狗 更新时间:2023-10-29 21:12:37 28 4
gpt4 key购买 nike

我正在尝试计算 python 中两条线之间的角度。我在互联网上搜索并找到了如何做到这一点的方程式。但我并不总能得到准确的结果。一些结果显然是错误的,而另一些结果似乎是正确的。我的代码如下:

def angle(pt1,pt2):
m1 = (pt1.getY() - pt1.getY())/1
m2 = (pt2.getY() - pt1.getY())/(pt2.getX()-pt1.getX())

tnAngle = (m1-m2)/(1+(m1*m2))
return math.atan(tnAngle)

def calculate(pt,ls):
i=2
for x in ls:
pt2 = point(x,i)
i=i+1
ang = angle(pt,pt2)*180/math.pi
ang = ang * (-1)
print ang


pt = point(3,1)
ls = [1,7,0,4,9,6,150]

calculate(pt,ls)

它产生的结果是:

45.0
0.0
45.0
-75.9637565321
0.0
-63.4349488229
0.0

问题是我不明白为什么第二个结果、第五个和最后一个结果归零,它们相交,因为它们共享一个点,而另一个点不重复,因为数组中的值不同。

最佳答案

如果

,你的角度公式将失败
pt2.getX() == pt1.getX()

(也就是说,如果 pt1 和 pt2 位于一条垂直线上)因为你不能除以零。 ( m2 ,斜率,将是无限的。)

还有

m1 = (pt1.getY() - pt1.getY())/1

将始终为零。所以至少,你的公式可以简化为斜率的arctan。但是,我不会打扰,因为该公式不适用于所有可能的点。

相反,计算两个向量(有向线段)之间角度的更稳健的方法(实际上是标准方法)是使用 dot product formula :

enter image description here

如果 a = (x1, y1) , b = (x2, y2) , 然后 <a,b>等于 x1*x2 + y1*y2 , 和 ||a||是向量的长度a ,即 sqrt(x1**2 + y1**2) .


import math

def angle(vector1, vector2):
x1, y1 = vector1
x2, y2 = vector2
inner_product = x1*x2 + y1*y2
len1 = math.hypot(x1, y1)
len2 = math.hypot(x2, y2)
return math.acos(inner_product/(len1*len2))

def calculate(pt, ls):
i = 2
for x in ls:
pt2 = (x, i)
i += 1
ang = math.degrees(angle(pt, pt2))
ang = ang * (-1)
print(ang)

pt = (3, 1)
ls = [1,7,0,4,9,6,150]

calculate(pt, ls)

关于python - 计算python中两个向量之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13226038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com