【问题标题】:Finding angle between two unit vectors in three dimensions在三个维度上找到两个单位向量之间的角度
【发布时间】:2011-07-03 06:38:57
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 其实,你可能应该仔细考虑一下你是否真的需要这个角度。如果您使用矢量数学来尽可能避免转换角度,那么数学通常会更简单(并且计算速度更快)。

标签: math geometry 3d


【解决方案1】:

这就是诀窍:

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

也适用于二维:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多