如何在两个四元数之间进行 Vector3 旋转
How to get a Vector3 rotation between two Quaternions
我正在编写一个使用 Configurable Joint
旋转 Rigidbody
的脚本。我已经弄清楚了 targetRotation
,但现在我正在为 targetAngularVelocity
苦苦挣扎,如果设置正确,这应该可以帮助我避免摇摆不定。
targetAngularVelocity
在documantation中是这样定义的:"This is a Vector3
. It defines the desired angular velocity that the joint should rotate into"。问题是我不知道如何根据两个 Quaternions
获得这个 Vector3
- 对象的当前旋转和目标旋转。
我是不是理解错了?有没有函数returns一个基于两个Quaternions
的旋转向量?
所以在数学上四元数表示刚体的方向。先考虑正向问题,看看方向q_1如何在一个旋转速度ω申请了t次。
从数学上讲,旋转矢量的大小为 ω,方向为 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;
我正在编写一个使用 Configurable Joint
旋转 Rigidbody
的脚本。我已经弄清楚了 targetRotation
,但现在我正在为 targetAngularVelocity
苦苦挣扎,如果设置正确,这应该可以帮助我避免摇摆不定。
targetAngularVelocity
在documantation中是这样定义的:"This is a Vector3
. It defines the desired angular velocity that the joint should rotate into"。问题是我不知道如何根据两个 Quaternions
获得这个 Vector3
- 对象的当前旋转和目标旋转。
我是不是理解错了?有没有函数returns一个基于两个Quaternions
的旋转向量?
所以在数学上四元数表示刚体的方向。先考虑正向问题,看看方向q_1如何在一个旋转速度ω申请了t次。
从数学上讲,旋转矢量的大小为 ω,方向为 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;