四元数基本定义
四元数是一个4维数,可以写成:
q=w+xi+yj+zk
或者用向量形式:
q=[w,x,y,z]T
其中:
- w 是实部(标量部分)
- x,y,z 是虚部(向量部分)
- i,j,k 是虚数单位,满足:i2=j2=k2=ijk=−1
可以把它看作:
一个标量 w(实部)+一个3维向量 [x,y,z](虚部)
- 第1维(w):旋转的"量"(标量部分)
- 第2-4维(x,y,z):旋转的"方向"(向量部分)
四元数的几何意义
想象一个4维空间:
- 第1维:w(实部,标量)
- 第2-4维:x,y,z(虚部,向量)
单位四元数:
- 所有满足 w2+x2+y2+z2=1 的四元数
- 构成4维空间中的单位球面(3维球面)
- 类比:
- 2D单位圆:x2+y2=1
- 3D单位球:x2+y2+z2=1
- 4D单位超球:w2+x2+y2+z2=1
只有单位四元数才能表示旋转
如何用四元数表示旋转
给定:
旋转轴:n=[nx,ny,nz](单位向量);
旋转角度:θ
对应的单位四元数:
q=[cos(θ/2),sin(θ/2)⋅nx,sin(θ/2)⋅ny,sin(θ/2)⋅nz],四元数用"半角"表示旋转
或者:
q=[cos(θ/2),sin(θ/2)⋅n]
例:
- 旋转180度:θ=180°,所以 θ/2=90°
四元数:q=[cos(90°),sin(90°)⋅n]=[0,n]
- 绕Z轴旋转90度
- 旋转轴:n=[0,0,1](Z轴方向)
- 旋转角度:θ=90°
- 计算:cos(45°)≈0.707,sin(45°)≈0.707
- 四元数:q=[0.707,0,0,0.707]
- 0.7072+02+02+0.7072=0.5+0.5=1
- 绕X轴旋转180度
- 旋转轴:n=[1,0,0](X轴方向)
- 旋转角度:θ=180°
- 计算:cos(90°)=0,sin(90°)=1
- 四元数:q=[0,1,0,0]
四元数的模长
定义:∣∣q∣∣=w2+x2+y2+z2
- 单位四元数: ∣∣q∣∣=1
几何意义:
- 四元数到原点的距离
- 单位四元数在单位球面上
- 每个点对应一个旋转
四元数乘法(旋转复合)
- 符号: ⊗
- 含义: 先应用旋转 q1,再应用旋转 q2
- 公式:
q1⊗q2=[w1,v1]⊗[w2,v2]
=[w1w2−v1⋅v2,w1v2+w2v1+v1×v2]
实部:w1w2 减去向量点积
虚部:w1v2+w2v1 加上向量叉积
例子:
q1=[0.707,0.707,0,0](绕Z轴转90度)
q2=[0.707,0,0.707,0](绕Y轴转90度)
计算 q1⊗q2:
- 实部:0.707×0.707−(0.707,0,0)⋅(0,0.707,0)=0.5−0=0.5
- 虚部:0.707×(0,0.707,0)+0.707×(0.707,0,0)+(0.707,0,0)×(0,0.707,0)=(0,0.5,0)+(0.5,0,0)+(0,0,0.5)=(0.5,0.5,0.5)
- 结果:q1⊗q2=[0.5,0.5,0.5,0.5]
为什么用四元数而不是旋转矩阵
- 旋转矩阵的问题:
- 冗余:9个数字表示3个自由度
- 约束多:必须是正交矩阵,行列式为1
- 插值困难
- 四元数的优势:
- 紧凑:4个数字表示3个自由度
- 插值简单
- 计算效率高