欧拉角、万向锁、四元数

[TOC]

比较好的资料

欧拉角

莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的。

参阅上图。设定xyz-轴为参考系的参考轴。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。zxz顺规的欧拉角可以静态地这样定义:

  • alpha 是x-轴与交点线的夹角,
  • beta 是z-轴与Z-轴的夹角,
  • gamma 是交点线与X-轴的夹角。

很可惜地,对于夹角的顺序和标记,夹角的两个轴的指定,并没有任何常规。科学家对此从未达成共识。每当用到欧拉角时,我们必须明确的表示出夹角的顺序,指定其参考轴。

  • pitch 俯仰角

  • yaw 偏航角

  • roll 翻滚角

万向锁 gimbal_lock

我的理解,欧拉角之所以自由灵活的转动是因为三个轴不在一个平面上,而像下图,上下翻转90度使得两个轴在一个平面时会发生死锁。

四元数

复数和旋转

复数的矩阵表示



模与共轭


复数的表示方法

复数和旋转


四元数旋转

glm::mat4 model = glm::mat4(1.0f); //创建一个单位矩阵
glm::qua<float> q = glm::qua<float>(glm::radians(glm::vec3(0.0f, 0.0f, 90.0f))); //创建一个绕z轴旋转90度的四元数
model = glm::mat4_cast(q) * model;	//得到一个旋转的模型矩阵