四元数转换矩阵代码

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

[ 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;
 
}
转帖地址: http://www.azure.com.cn
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值