如何获得两个四元数之间的Vector3旋转

时间:2019-12-21 17:47:15

标签: c# unity3d quaternions

我正在编写一个脚本,该脚本使用Rigidbody来旋转Configurable Joint。我已经弄清楚了targetRotation,但是现在我在targetAngularVelocity上苦苦挣扎,如果设置正确,这应该可以帮助我避免出现晃动。

targetAngularVelocitydocumantation中定义如下:“这是Vector3。它定义了关节应旋转到的所需角速度”。问题是我不知道如何基于两个Vector3(对象的当前旋转和目标旋转)来获得Quaternions

我理解不正确吗?是否有一个基于两个Quaternions返回旋转向量的函数?

1 个答案:

答案 0 :(得分:3)

因此,四元数在数学上表示刚体的方向。首先考虑正向问题,看看在将ω应用于旋转速度后,方向 q_1 如何转换为另一个方向 q_2 时间。

在数学上,旋转矢量的大小为ω,方向为 k ,使得ω =ω* k

这是通过四元数乘法完成的

q_2 = q_ω * q_1

其中q_ω表示围绕 k 轴的旋转,角度为θ=ω* t。

相反,您需要使用

找到q_ω

var q_ω = q_2 * Quaternion.Inverse(q_1);

并提取旋转轴和角度

q_ω.ToAngleAxis(out float angle, out Vector3 axis);

并在time秒内组成与该转换相对应的旋转速度矢量。

var ω = (angle/time)*axis;
相关问题