使用 atan2 计算 3D 空间中 2 个向量之间的角度

Calculate the angle between 2 vectors in 3D space using atan2

提问人:NickM 提问时间:11/3/2023 最后编辑:toyota SupraNickM 更新时间:11/3/2023 访问量:118

问:

我正在尝试计算 3D 空间中移动物体的转弯角度。我希望角度在范围范围内,因为在我稍后的分析中有一些拟合目的。我知道在 2D 空间中您可以使用以下函数进行计算:[-π, π]atan2

θ=atan2(vector2.y, vector2.x) - atan2(vector1.y, vector1.x).

然而,在 3D 空间中,公式概括为:

θ = atan2(norm(cross(vector1,vector2)), dot(vector1, vector2))但是这种形式忽略了函数第一个分量的符号,因此 , 的范围介于 之间。angleθ[0,π]

我错过了什么吗?还有其他方法吗?

Python Matlab 数学 几何

评论

4赞 Thierry Lathuille 11/3/2023
如何在 3D 空间中定义角度的方向?这仅在平面上有意义,因此空间中的角度将在 [0,π] 中。
0赞 Cris Luengo 11/3/2023
您的方程计算由这两个向量定义的平面上两个向量之间的角度,这是有道理的。两个向量之间的角度永远不能大于 pi,因为如果它更短,你可以绕到另一个方向。
1赞 lastchance 11/3/2023
只需使用 acos(单位向量的点积)。它会给你一个 [0,pi] 的角度,这在 3d 中是有意义的,atan2 在 3d 中对你没有帮助。
1赞 Cris Luengo 11/3/2023
@lastchance 点积可以大于 1。您错过了两个向量的范数的归一化。这就是具有叉积规范的 atan2 所做的。
0赞 lastchance 11/3/2023
仔细阅读我的帖子,Luengo@Cris。我写了 UNIT 向量的点积(如果必须的话,方向向量除以它们的大小)。这不会超过 1。

答: 暂无答案