我正在尝试做一些基本的3D模拟,但自从我在高中学习这些东西以来,已经有20年了……
如果我在三维空间中有两个向量,我如何找到它们之间的角度。例如,我有一个向量(3,2,1)和另一个向量(4,-5,6),我如何找到它们之间的角度(以度或弧度为单位)。如果我没记错的话,有一些公式可以做到这一点。
谢谢。
发布于 2016-02-14 13:42:06
这样做是可行的:
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
https://stackoverflow.com/questions/5100143
复制相似问题