繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM