阅读新闻

四元数转换矩阵代码

[日期:2007-03-31] 来源:  作者: [字体: ]
         
如有转载,请注明:
http://www.azure.com.cn

四元数与同构矩阵之间可以互相转换.
一般四元数的计算矩阵运算如下:

[ w2+x2-y2-z2 , 2xy-2wz , 2xz+2wy ]
[ 2xy+2wz , w2-x2-y2-z2 , 2yz-2wx ]
[ 2xz-2wy , 2yz+2wx , w2-x2-y2-z2 ]


但是对于范化的四元数, 可以简化上述的矩阵变换:

[ 1-2y2-2z2 , 2xy-2wz , 2xz+2wy ]
[ 2xy+2wz , 1-2x2-2z2 , 2yz-2wx ]
[ 2xz-2wy , 2yz+2wx , 1-2x2-2y2 ]


以下上将四元数转换到矩阵的代码:
void QuatToMatrix( Quat* quat, float m[4][4] )
{
 float wx, wy, wz, xx, yy, yz, xy, xz, zz, x2, y2, z2;
 
 //计算相关的系数
 x2 = quat->x + quat->x;
 y2 = quat->y + quat->y;
 z2 = quat->z + quat->z;
 
 xx = quat->x * x2;
 xy = quat->x * y2;
 xz = quat->x * z2;
 yy = quat->y * y2;
 yz = quat->y * z2;
 zz = quat->y * z2;
 wx = quat->w * x2;
 wy = quat->w * y2;
 wz = quat->w * z2;

 //将其填入矩阵位置
 m[0][0] = 1.0 - (yy +zz);
 m[1][0] = xy - wz;
 m[2][0] = xz + wy;
 m[3][0] = 0.0;
 m[0][1] = xy + wz;
 m[1][1] = 1.0-(xx+zz);
 m[2][1] = yz + wx;
 m[3][1] = 0.0;
 m[0][2] = xz + wy;
 m[1][2] = yz + wx;
 m[2][2] = 1.0 - (xx + yy);
 m[3][2] = 0.0;
 m[0][3] = 0.0;
 m[1][3] = 0.0;
 m[2][3] = 0.0;
 m[3][3] = 1.0;
 
}


阅读:
录入:admin

评论 】 【 推荐 】 【 打印
上一篇:矩阵转换四元数代码
下一篇:一个通用的单体模板
相关新闻      
本文评论       全部评论
发表评论
字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款