三维变换
和上节一样,我们使用齐次坐标
- 3D点:(x,y,z,1)⊤(x,y,z,1)^\top(x,y,z,1)⊤
- 3D向量:(x,y,z,0)⊤(x,y,z,0)^\top(x,y,z,0)⊤
通常情况下,w≠0w\neq0w=0,3D点表示为(x/w,y/w,z/w,1)⊤(x/w,y/w,z/w,1)^\top(x/w,y/w,z/w,1)⊤
则我们可以使用4×44\times44×4矩阵表示仿射变换
[x′y′z′1]=[abctxdeftyghitz0001][xyz1](1) \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \\ z^{\prime} \\ 1 \end{array}\right]=\left[\begin{array}{ll} a & b & c & t_x \\ d & e & f & t_y \\ g & h & i & t_z \\ 0 & 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right] \tag{1} ⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=⎣⎢⎢⎡adg0beh0cfi0txtytz1⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤(1)
缩放
S(sx,sy,sz)=[sx00tx0sy0ty00sztz0001](2) \bold{S}(s_x,s_y,s_z)= \left[\begin{array}{ll} s_x & 0 & 0 & t_x \\ 0 & s_y & 0 & t_y \\ 0 & 0 & s_z & t_z \\ 0 & 0 & 0 & 1 \end{array}\right] \tag{2} S(sx,sy,sz)=⎣⎢⎢⎡sx0000sy0000sz0txtytz1⎦⎥⎥⎤(2)
平移
T(tx,ty,tz)=[100tx010ty001tz0001](3) \bold{T}(t_x,t_y,t_z)= \left[\begin{array}{ll} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{array}\right] \tag{3} T(tx,ty,tz)=⎣⎢⎢⎡100001000010txtytz1⎦⎥⎥⎤(3)
旋转
绕xxx轴旋转
Rx(α)=[100tx0cosα−sinαty0sinαcosαtz0001](4) \bold{R}_x(\alpha)= \left[\begin{array}{c} 1 & 0 & 0 & t_x \\ 0 & \cos\alpha & -\sin\alpha & t_y \\ 0 & \sin\alpha & \cos\alpha & t_z \\ 0 & 0 & 0 & 1 \end{array}\right] \tag{4} Rx(α)=⎣⎢⎢⎡10000cosαsinα00−sinαcosα0t