作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用四元数表示的方向和一个用四元数或数字(围绕原始方向的每秒弧度)表示的角速度。我了解如何使用转换为轴角来执行此操作,但该方法在计算上相当昂贵并且不是一个现实的选择。在给定时间间隔(以秒为单位)的情况下,我将如何修改方向四元数?我需要针对这两种情况(四元数和数字)的解决方案。但是,将一种情况转换为另一种情况是可以接受的,并且可能更可取,具体取决于转换所需的各种算法/公式的计算复杂度。
最佳答案
要更新方向,您需要将当前方向乘以增量旋转。这是与轴角转换相当昂贵的操作。
表示角速度的常用方法是“指数图”,即与旋转轴平行的 3d 矢量和旋转速度的大小(每秒弧度)。转换为 delta 旋转四元数看起来像
Quaternion deltaRotation(const Vector3& em, double deltaTime)
{
Vector3 ha = em * deltaTime * 0.5; // vector of half angle
double l = ha.norm(); // magnitude
if (l > 0) {
ha *= sin(l) / l;
return Quaternion(cos(l), ha.x(), ha.y(), ha.z());
} else {
return Quaternion(1.0, ha.x(), ha.y(), ha.z());
}
}
如果您的 deltaTime 较小且旋转速度较小,您可以使用 1st Taylor 级数乘数的近似值。但是您应该规范化结果四元数以避免更频繁地出现数值不稳定。
Quaternion deltaRotationAppx1(const Vector3& em, double deltaTime)
{
Vector3 ha = em * deltaTime * 0.5; // vector of half angle
return Quaternion(1.0, ha.x(), ha.y(), ha.z());
}
关于3d - 高效四元数角速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197182/
我的游戏有点问题。我试图让一个球从一个点移动到另一个点。这是我的代码: void Create() { // Initialise points StartPosition - { 2
我是一名优秀的程序员,十分优秀!