gpt4 book ai didi

3d - 高效四元数角速度

转载 作者:行者123 更新时间:2023-12-02 08:33:37 24 4
gpt4 key购买 nike

我有一个用四元数表示的方向和一个用四元数或数字(围绕原始方向的每秒弧度)表示的角速度。我了解如何使用转换为轴角来执行此操作,但该方法在计算上相当昂贵并且不是一个现实的选择。在给定时间间隔(以秒为单位)的情况下,我将如何修改方向四元数?我需要针对这两种情况(四元数和数字)的解决方案。但是,将一种情况转换为另一种情况是可以接受的,并且可能更可取,具体取决于转换所需的各种算法/公式的计算复杂度。

最佳答案

要更新方向,您需要将当前方向乘以增量旋转。这是与轴角转换相当昂贵的操作。

表示角速度的常用方法是“指数图”,即与旋转轴平行的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com