1. 平移(Translation)
给三维空间坐标引入第 4 个分量 w,使平移变换也能表示为矩阵乘法,从而将所有几何变换统一为矩阵运算。
平移变换将点 (x,y,z) 移动到 (x+tx,y+ty,z+tz):
x′y′z′=x+tx=y+ty=z+tz⇒x′y′z′1=100001000010txtytz1xyz1
T(tx,ty,tz)=100001000010txtytz1
2. 缩放(Scale)
缩放变换将点 (x,y,z,w) 缩放到 (sx⋅x,sy⋅y,sz⋅z,w):
x′y′z′w′=sx⋅x=sy⋅y=sz⋅z=w⇒x′y′z′w′=sx0000sy0000sz00001xyzw
S(sx,sy,sz)=sx0000sy0000sz00001
3. 旋转(Rotation)
以绕 Z 轴旋转 θ,为例:
x′y′z′=xcosθ−ysinθ=xsinθ+ycosθ=z⇒x′y′z′1=cosθsinθ00−sinθcosθ0000100001xyz1
同样地,绕其它坐标轴旋转也可以推导出其矩阵形式。
绕 Z 轴:
Rz(θ)=cosθsinθ00−sinθcosθ0000100001绕 X 轴:
Rx(θ)=10000cosθsinθ00−sinθcosθ00001绕 Y 轴:
Ry(θ)=cosθ0−sinθ00100sinθ0cosθ00001

如上图所示,对于任意一点 P(x,y,z),用向量表示为 v,旋转轴单位向量为 k。
第一步:向量分解
将 v 分解为平行于 k 的分量 v∥ 和垂直于 k 的分量 v⊥:
v∥v⊥=(v⋅k)k=v−v∥=v−(v⋅k)k
第二步:构造局部正交基
以 k 为旋转轴,构造一个局部坐标系:
ezexey=k=∣v⊥∣v⊥=w=k×ex(旋转轴,类比z轴)(水平分量方向,类比x轴)(垂直分量方向,类比y轴)
第三步:绕轴旋转
在局部坐标系中,绕 k 旋转 θ 等价于绕 Z 轴旋转:
v⊥′=cosθ⋅v⊥+sinθ⋅ey⋅∣v⊥∣=cosθ⋅v⊥+sinθ⋅(k×v⊥)
由于 k×v∥=0,所以 k×v⊥=k×v。
平行分量旋转后不变:
v∥′=v∥
第四步:合并得到旋转后的向量
v′=v∥′+v⊥′=v∥+cosθ⋅v⊥+sinθ⋅(k×v)=(v⋅k)k+cosθ⋅(v−(v⋅k)k)+sinθ⋅(k×v)=cosθ⋅v+(1−cosθ)(v⋅k)k+sinθ⋅(k×v)
第五步:写成矩阵形式
利用叉积的矩阵表示 k×v=[k]×v,其中:
[k]×=0kz−ky−kz0kxky−kx0
以及外积 (v⋅k)k=(kkT)v,可得:
v′=(cosθ⋅I+(1−cosθ)kkT+sinθ⋅[k]×)v
Rk(θ,k)=cosθ+kx2cpkykxcp+kzsinθkzkxcp−kysinθ0kxkycp−kzsinθcosθ+ky2cpkzkycp+kxsinθ0kxkzcp+kysinθkykzcp−kxsinθcosθ+kz2cp00001其中 cp=1−cosθ
换个角度看,绕任意轴旋转本质上就是一次基变换:
- 先将旋转轴对齐到 Z 轴(换到新基),变换矩阵为 M
- 在新基下执行简单的 Rz(θ)
- 逆变换回原基,变换矩阵为 M−1
即 R(k,θ)=M−1Rz(θ)M