c# - 如何在两个四元数之间获得 Vector3 旋转
问题描述
我正在编写一个Rigidbody
使用 a旋转 a 的脚本Configurable Joint
。我已经targetRotation
弄清楚了,但现在我正在努力解决targetAngularVelocity
,如果设置正确,这应该可以帮助我避免晃动。
targetAngularVelocity
在文档中是这样定义的:“这是一个Vector3
。它定义了关节应该旋转到的所需角速度”。问题是我不知道如何Vector3
基于两个Quaternions
- 对象的当前旋转和目标旋转来获得它。
我没有正确理解它吗?是否有一个函数可以返回基于两个的旋转向量Quaternions
?
解决方案
所以在数学上,四元数代表刚体的方向。首先考虑前向问题,看看方向q_1在应用旋转速度ω t时间后如何转换为另一个方向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;
推荐阅读
- android - 如何下载 google maven 库?
- javascript - 我如何为来自 Stripe 的 javascript 理想付款创建一个 webhook
- javascript - 如何在 React Native 中垂直和水平对齐父组件“顶部”的子组件?
- google-chrome-extension - 在进行开发时是否有更好的方法来继续删除和重新加载“解压”的 chrome 扩展
- javascript - 如何为输入创建全局变量以及为什么要添加
- javascript - 如何在更新时制作 vuex 状态更新 UI?
- java - 用于自我更新程序的 Docker entrypoint.sh
- cors - 与邮递员和浏览器一起使用的请求资源上不存在“Access-Control-Allow-Origin”标头
- windows - 如何在批处理文件的for循环中提取a中的子字符串
- typescript - 如何在打字稿游乐场加载节点库?