首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >四元数瞬时数值漂移

四元数瞬时数值漂移
EN

Stack Overflow用户
提问于 2013-06-16 14:18:29
回答 1查看 579关注 0票数 2

我正在传播一个四元数,从用户鼠标输入中创建一个四元数,其中创建一个四元数,用于X轴中的附加旋转,一个用于Y轴,并将这些旋转组合成一个四元数。我一直在相机四元数中添加(附加)这些变化,因此创建了一个无微光锁的相机(它仍然像疯了一样滚动)。

当我开始旋转相机的时候,旋转矩阵就开始缩放,失去控制。当我将相机四元数的每一帧标准化时,一切都很正常,但是不应该需要对每一帧进行规范化,对吧?如果这是数字漂移,那么它就不能这么快就被看到,对吗?

在这个问题中:Quaternion and normalization

大卫·哈曼( David Hammen )发表了以下评论:

归一化是将四元数拖回单位3球体的一个传说.四元数偏离流形的原因是欧拉步长在数学上是无效的:单位四元数是一个群,而不是代数。不使用单位四元数也是无效的;现在您没有关于so(3)的图表。如果做得好(例如,Lie组集成技术),那么四元数几乎就会停留在流形上。你可能还需要偶尔正常化。

是不是因为我从欧拉旋转中产生了两个四元数,这就是我旋转错误的原因?

欧拉旋转产生的四元数在使用前是否应该标准化?

EN

回答 1

Stack Overflow用户

发布于 2014-03-17 11:40:50

首先,找出你的四元数是否变成NONunit?以及问题的根源。

我建议在伪码中使用对非单位四元数矩阵的鲁棒转换。

代码语言:javascript
复制
inline void to_matrix( matrix33& m  )const  {
        float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2;
        float s  = 2.0f/norm_2_sqr(); 
        x2 = x * s;    y2 = y * s;    z2 = z * s;
        xx = x * x2;   xy = x * y2;   xz = x * z2;
        yy = y * y2;   yz = y * z2;   zz = z * z2;
        wx = w * x2;   wy = w * y2;   wz = w * z2;

        m.m[0][0] = 1.0f - (yy + zz);
        m.m[0][1] = xy - wz;
        m.m[0][2] = xz + wy;

        m.m[1][0] = xy + wz;
        m.m[1][1] = 1.0f - (xx + zz);
        m.m[1][2] = yz - wx;

        m.m[2][0] = xz - wy;
        m.m[2][1] = yz + wx;
        m.m[2][2] = 1.0f - (xx + yy);

        //1 division    16 multiplications    15 addidtions    12 variables
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17134228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档