[英]Calculating the angle between two 3D vectors
我试图计算python中两个3D向量之间的角度,由于某种原因,我得到了两个不同的答案,具体取决于我将其插入代码中的方式,并且想知道是否有人可以查看它并看到我的错误。
就本示例而言,让我们仅假设向量是numpy数组[1、2、3]和[2、3、4]
目前,我的代码如下:
import numpy as np
import math
def CalculateAngleBetweenVector(vector, vector2):
dp = np.dot(vector, vector2)
maga = math.sqrt((vector[0] ** 2) + vector[1] ** 2 + vector[2] ** 2)
magb = math.sqrt((vector2[0] ** 2) + vector2[1] ** 2 + vector2[2] ** 2)
magc = maga * magb
dpmag = dp / magc
angleindeg = ((math.acos(dpmag)) * 180) / math.pi
return angleindeg
#Assume these vectrs have come from elsewhere and are not unit vectors so I first calculate the unit vectors
vectorA = vectorA / (vectorA ** 2).sum() ** 0.5
vectorB = vectorB / (vectorB ** 2).sum() ** 0.5
#I want to plot these on a quiver graph so the next few lines are for that
VectorDif = np.subtract(vectorA, vectorB)
Vector = np.add((0, 0, 1), VectorDif)
Vector = Vector / (Vector ** 2).sum() ** 0.5
好吧,现在混乱来了。 我应该有两种方法来计算角度,它们应该产生相同的结果,但不会。
第一种方法是:
CalculateAngleBetweenVector((0,0,1), Vector)
第二种方法是:
CalculateAngleBetweenVector(vectorA, vectorB)
据我所知,这些应该产生相同的结果,但是它们却不能,我不知道为什么。
我认为问题出在数学而不是代码。 尝试vectorA = [1, 0, 0]
和vectorB = [0, 1, 0]
-> 90°角。
我得到vector = [1, -1, 1] / sqrt(3)
-> acos(1 / sqrt(3))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.