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

问题描述 投票:-1回答:1

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

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

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

c# unity3d quaternions
1个回答
0
投票

因此,四元数在数学上表示刚体的方向。首先考虑正向问题,并观察在施加旋转速度ω t时间后,方向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;
© www.soinside.com 2019 - 2024. All rights reserved.