http://www.azure.com.cn
根据欧拉转动计算四元数的变换如下:
q = qyaw qpitch qroll
其中
qroll = [cos(y/2), (sin(y/2), 0, 0)];
qpitch = [cos(q/2), (0, sin(q/2), 0)];
qyaw = [cos(f/2), (0, 0, sin(f/2)];
其转换代码如下:
void EulerToQuat( float roll, float pitch, float yaw, Quat* quat)
{
float cr, cp, cy, sr, sp, sy, cpcy, spsy;
//计算求四元数时使用到的所有三角值
cr = cos(roll / 2);
cp = cos(pitch / 2);
cy = cos(yaw / 2);
sr = sin(roll/2);
sp = sin(pitch/2);
sy = sin(yaw/2);
cpcy = cp * cy;
spsy = sp * sy;
//组合这些值,生成四元数的向量和w
quat->w = cr*cpcy + sr*spsy;
quat->x = sr*cpcy - cr*spsy;
quat->y = cr*sp*cy + sr*cp*sy;
quat->z = cr*cp*sy - sr*sp*cy;
}
{
float cr, cp, cy, sr, sp, sy, cpcy, spsy;
//计算求四元数时使用到的所有三角值
cr = cos(roll / 2);
cp = cos(pitch / 2);
cy = cos(yaw / 2);
sr = sin(roll/2);
sp = sin(pitch/2);
sy = sin(yaw/2);
cpcy = cp * cy;
spsy = sp * sy;
//组合这些值,生成四元数的向量和w
quat->w = cr*cpcy + sr*spsy;
quat->x = sr*cpcy - cr*spsy;
quat->y = cr*sp*cy + sr*cp*sy;
quat->z = cr*cp*sy - sr*sp*cy;
}
