在三维中找到两个单位矢量之间的角度

时间:2011-02-24 03:46:26

标签: math geometry 3d

我正在尝试做一些基本的3D模拟,但是自从我在高中学习这些东西已经20年了......

如果我有三个维度的两个向量,我如何找到它们之间的角度。例如,我有一个(3,2,1)向量和另一个(4,-5,6),我如何找到它们之间的角度(以度或弧度为单位)。如果我记得有一些公式可以做到这一点。

感谢。

2 个答案:

答案 0 :(得分:0)

这就是诀窍:

atan2(sqrt(dot(cross(a, b), cross(a, b))), dot(a, b))

作为python lambda函数:

import math, numpy

angle = lambda a, b: math.atan2(
    math.sqrt(
        numpy.dot(*([numpy.cross(a, b)]*2))
    ), 
    numpy.dot(a, b)
)

结果是弧度:

In : angle([1.,1.,1.], [-1.,1.,1.])
Out: 1.2309594173407747

In : angle([0.,1.,0.], [0.,0.,1.])
Out: 1.5707963267948966

也适用于2个维度:

In : angle([0.,1.], [1.,0.])
Out: 1.5707963267948966

In : angle([0.,1.], [1.,1.])
Out: 0.7853981633974483

答案 1 :(得分:-2)

Here你去了