计算两个3D向量之间的角度

时间:2019-09-06 17:05:11

标签: python numpy vector

我正在尝试计算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)

据我所知,这些应该产生相同的结果,但它们不会,并且我不知道为什么。

1 个答案:

答案 0 :(得分:0)

我认为问题出在数学而不是代码。 尝试vectorA = [1, 0, 0]vectorB = [0, 1, 0]-> 90°角。

我得到vector = [1, -1, 1] / sqrt(3)-> acos(1 / sqrt(3))的角度。