四元数(Quaternions)与旋转总结

四元数与旋转

  • 1 四元数的表示
    • 1.1 一般形式
    • 1.2 有序对
  • 2 四元数的乘法
  • 3 单位四元数
  • 4 共轭四元数
  • 5 四元数的逆
  • 6 四元数与空间旋转
  • 7 总结
  • 8 旋转矩阵,欧拉角,四元数比较
  • 9 参考博文

1 四元数的表示

1.1 一般形式

  • q = s + x i + y j + z k s , x , y , z ∈ R q = s + xi + yj + zk \quad s,x,y,z∈R q=s+xi+yj+zks,x,y,zR
  • i ² = j ² = k ² = i j k = − 1 i² = j² = k² = ijk = -1 i²=j²=k²=ijk=1

1.2 有序对

  • q = [ s , v ⃗ ] 或 [ s , x i + y j + z k ] s , x , y , z ∈ R 我 们 可 以 理 解 为 s 表 示 的 实 部 , 向 量 v ⃗ 表 示 的 就 是 三 维 空 间 q=[s,\vec v] 或 [s,xi + yj + zk] \quad s,x,y,z∈R \\我们可以理解为s表示的实部,向量\vec v表示的就是三维空间 q=[s,v ][s,xi+yj+zk]s,x,y,zRsv

2 四元数的乘法

  • q a = [ s a , a ⃗ ] , q a = [ s a , a ⃗ ] q a q b = [ s a s b − a ⃗ ⋅ b ⃗ , s a b ⃗ + s b a ⃗ + a ⃗ × b ⃗ ] q_a = [s_a,\vec a],\quad q_a = [s_a,\vec a] \\q_aq_b = [s_as_b-\vec a \cdot \vec b,s_a \vec b+s_b \vec a + \vec a \times \vec b] qa=[sa,a ],qa=[sa,a ]qaqb=[sasba b ,sab +sba +a ×b ]

3 单位四元数

  • s 2 + x 2 + y 2 + z 2 = 1 即 四 元 数 模 为 1 s^2 +x^2+y^2+z^2 =1 \\即四元数模为1 s2+x2+y2+z2=11

4 共轭四元数

  • q ∗ = [ s , − v ⃗ ] = s − x i − y j − z k q^* = [s, -\vec v] = s - xi -yj-zk q=[s,v ]=sxiyjzk

5 四元数的逆

  • q − 1 = q ∗ ∣ q ∣ 2 当 q 是 单 位 向 量 时 , q − 1 = q ∗ q^{-1} = \dfrac{q^*}{|q|^2} \quad 当q是单位向量时,q^{-1} = q^* q1=q2qqq1=q

6 四元数与空间旋转

  • 若 三 维 空 间 里 的 一 个 点 p 的 笛 卡 尔 坐 标 为 ( x , y , z ) , 则 用 纯 四 元 数 表 示 为 p = x i + y j + z k 若三维空间里的一个点p的笛卡尔坐标为(x,y,z),则用纯四元数表示为p=xi+yj+zk p(x,y,z),p=xi+yj+zk
  • 旋 转 四 元 数 的 一 般 形 式 : q = [ c o s 1 2 θ , s i n 1 2 θ v ⃗ ] 这 个 四 元 数 表 示 某 个 旋 转 , 是 绕 单 位 向 量 v ⃗ 进 行 了 θ 角 度 的 逆 时 针 旋 转 。 旋转四元数的一般形式:q =[cos \dfrac{1}{2}\theta,sin \dfrac{1}{2}\theta \vec v] \\这个四元数表示某个旋转,是绕单位向量\vec v进行了\theta角度的逆时针旋转。 q=[cos21θ,sin21θv ]v θ
  • 点 p 经 过 旋 转 后 的 位 置 p ′ = q p q − 1 点p经过旋转后的位置 p' = qpq^{-1} pp=qpq1

7 总结

除了特别难理解之外,相比矩阵或欧拉角,四元数在表示旋转这个事情上,拥有一些明显的优点。

  • SLERP和SQUAD,提供了一种使得在朝向之间可以平滑过渡的方法。
  • 使用四元数来串联"旋转",要比使用矩阵快得多。
  • 对于单位四元数,逆向旋转可以通过对向量部分取反来实现。而计算一个矩阵的逆矩阵是被认为比较慢的,如果这个矩阵未被标准正交化的话(标准正交矩阵的逆矩阵是它的转置矩阵)。
  • 从四元数转换到矩阵,要比从欧拉角转换到矩阵快一点。
  • 四元数只需要4个数字(如果旋转四元数已经单位化了那么只需要3个,实数部分可以在运行时计算)来表示一个旋转,而矩阵需要至少9个数字。

尽管使用四元数有这么多优点,还是有缺点存在的。

  • 因为浮点数的舍入运算错误,四元数可能会变无效。不过,这个错误可以通过重新单位化四元数来避免。
  • 使用四元数最具威慑性的地方,还是四元数的理解难度大。

8 旋转矩阵,欧拉角,四元数比较

参考《3D数学基础:图形与游戏开发》

  • 旋转矩阵,欧拉角,四元数主要用于:向量的旋转、坐标系之间的转换、角位移的计算、方位的平滑插值计算。

不同的方位表示方法适用于不同的情况:

  1. 欧拉角最容易使用。当需要为世界中的物体指定方位时,欧拉角能大大简化人机交互,包括直接键盘输入方位、在代码中指定方位(如为渲染设定摄像机)、在调试中测试。
  2. 如果需要在坐标系之间转换向量,就选择矩阵形式。另一种方法是用欧拉角作为方位的“主拷贝“,但同时维护一个旋转矩阵,当欧拉角发生改变时,矩阵也要同时进行更新。
  3. 当需要大量保存方位数据(如动画)时,就使用欧拉角或者四元数,欧拉角少占用25%内存,但是转换到矩阵慢。如果动画数据需要嵌套坐标系之间的连接,四元数可能是最好的选择。
    平滑插值只能用四元数。用其它形式则必须转到四元数,插值完毕再转回去。
    四元数(Quaternions)与旋转总结_第1张图片

9 参考博文

参考链接

你可能感兴趣的:(数学知识)