我正在尝试计算python中两个3D向量之间的角度,由于某种原因,我得到了两个不同的答案,具体取决于我将其插入代码的方式,并且想知道是否有人可以查看它并看到我的错误。 / p>
就本示例而言,让我们仅假设向量是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)
据我所知,这些应该产生相同的结果,但它们不会,并且我不知道为什么。
答案 0 :(得分:0)
我认为问题出在数学而不是代码。
尝试vectorA = [1, 0, 0]
和vectorB = [0, 1, 0]
-> 90°角。
我得到vector = [1, -1, 1] / sqrt(3)
-> acos(1 / sqrt(3))
的角度。