An introduction to Quaternions Application 四元数应用简介
介绍四元数在旋转表示中的基本定义、identity quaternion 和 pure quaternion。
An introduction to Quaternions Application 四元数应用简介
四元数是由爱尔兰数学家 哈密顿 提出定义的 超复数,其有 一个实数部 和 三个虚数部 组成,它的提出本意为将 二维复平面的复数拓展到 三维空间 中
四元数其实并不难处理,可以把它们想象成 角度/轴 的 pair (但和 轴角 表示并不相同),四元数的主要优势在于它们 插值 效果很好
四元数表示一个 旋转 rotation,而不是一个 方向 orientation,区别在于
- 旋转 rotation 描述如果将一个 基 移动到另一个 基
- 而 方向 orientation 本身就是一个 基
定义
四元数 是
分别为
- 元组表示
- 复数表示
其中 为虚数单位 - 标量,向量表示
其中 为 标量 ,而 是 向量- 四元数的 向量部分 与 转轴 有关,标量部分 与 旋转角度 有关,但它们都不是直接相等关系,也就是说,不可以与 轴-角 表示搞混
它可以实现为
struct Quaternion {
float x; // vector part
float y; // vector part
float z; // vector part
float w; // scalar part
}一个有着四个分量的元组,其中的 标量 分量 对于将 四元数 转换为 矩阵 非常重要
在图形学中,我们总是使用 单位四元数 (长度为 的 四元数),随着 浮点误差值 的累积,可能需要周期化的重新对四元数执行 归一化
恒等四元数 Identity Quaternion
四元数具有 乘法恒等式,这个特殊恒等四元数表示 无旋转 (零旋转),其标量分量为 1,向量分量为 0
Quaternion Identity() {
// x, y, z, w
return Quaternion (0, 0, 0, 1)
}纯四元数 Pure Quaternion
任何向量都可以变成四元数,只需将标量部分留为零,并将 归一化 的向量放入四元数的向量部分即可,得到的四元数是“纯”四元数,任何标量值为零的四元数都称为“纯”四元数,表示一个 三维向量,不直接对应有效旋转
Quaternion Pure(Vector3 vec) {
Vector3 normalized_vec = normalized(vec);
return Quaternion(normalized_vec.x, normalized_vec.y, normalized_vec.z, 0);
}