文章

刚体变换与仿射矩阵:用立方体理解三维变换

通过交互式立方体,理解如何用 4×4 齐次形式的仿射矩阵表示刚体变换,以及加入缩放与剪切后几何性质如何变化。

刚体变换与仿射矩阵:用立方体理解三维变换

刚体变换是几何变换,仿射矩阵是表示和计算变换的工具。 本文用 4×4 齐次形式的仿射矩阵表示旋转与平移,实现立方体的刚体变换。两者并不是先后两个阶段。

同样的矩阵形式也能表示缩放和剪切。当线性部分只有旋转时,配合平移得到刚体变换,保持长度与角度;加入非单位缩放或剪切后,矩阵仍是仿射矩阵,但所表示的变换通常不再是刚体变换。下面以缩放和剪切作为对照,帮助理解矩阵的作用。

下面的演示把这些变化放在一起。先动手调整参数,再回来看矩阵的每一部分,会更容易理解它们之间的关系。

先动手:观察一个立方体

灰色虚线表示原始立方体和世界坐标轴,紫色实线表示变换后的立方体;红、绿、蓝三条轴分别表示变换后的局部 x、y、z 方向。

拖动画面可改变观察方向,聚焦画面后也可以用方向键调整视角。改变视角只影响观察方式,不会修改变换矩阵。

正在加载交互演示…

原始立方体与变换后的立方体灰色虚线为原始位置,紫色实线为变换后的形状,红绿蓝线为局部坐标轴。

拖动或使用方向键旋转视角;灰色为原始位置,紫色为变换结果。

旋转:依次绕 X、Y、Z 轴
0
0
0
平移
0
0
0
缩放与剪切
1
1
1
0
4×4 齐次变换矩阵 T
当前类型

性质针对三维空间中的变换,不受观察视角影响。

同一种矩阵形式,可以表示哪些变换?

  1. 刚体变换:点击“刚体示例”。立方体移动并转向,但棱长和夹角不变。可以把它理解为搬动桌面上的一个盒子。
  2. 相似变换:点击“相似示例”。三个方向按同一比例缩放,立方体整体变大,长度改变,角度仍保持。
  3. 一般仿射变换:点击“仿射示例”。不同方向的缩放加上剪切,让立方体拉伸、倾斜。长度和角度不再普遍保持,但直线仍是直线,平行关系也保留。
变换长度角度平行关系与直线
刚体变换(此处为旋转与平移)保持保持保持
相似变换(统一正比例缩放)比例不为 1 时不保持保持保持
一般仿射变换不保证保持不保证保持本演示中保持

这里的“不保持”是说不能保证所有长度或角度都不变,并不意味着每一条线段、每一个角都会改变。刚体和相似变换本身也属于仿射变换;面板优先显示更具体的类型。

为什么要用 4×4 矩阵?

对三维点使用列向量表示时,仿射变换可以写成:

\[\mathbf{p}'=A\mathbf{p}+\mathbf{t}\]

其中,左上角的 $3\times3$ 矩阵 $A$ 负责旋转、缩放和剪切,向量 $\mathbf{t}$ 负责平移。给点补上第四个坐标 $1$,就能把这两步合并成一次矩阵乘法:

\[\begin{bmatrix}x'\\y'\\z'\\1\end{bmatrix} = \underbrace{\begin{bmatrix} a_{11}&a_{12}&a_{13}&t_x\\ a_{21}&a_{22}&a_{23}&t_y\\ a_{31}&a_{32}&a_{33}&t_z\\ 0&0&0&1 \end{bmatrix}}_{T} \begin{bmatrix}x\\y\\z\\1\end{bmatrix}\]

调整平移滑块时,可以看到只有矩阵的最后一列发生变化。左上角三列则分别描述三个单位坐标轴经过线性变换后的方向和长度,对应画面中的红、绿、蓝三条局部轴。

最后一行始终为 $[0,0,0,1]$,所以变换后点的第四个坐标仍为 $1$。这个演示不涉及透视投影;画面使用正交投影呈现三维几何。

变换顺序:从右往左看

演示采用的线性部分是:

\[A=R_zR_yR_xHS,\qquad S=\begin{bmatrix}s_x&0&0\\0&s_y&0\\0&0&s_z\end{bmatrix},\qquad H=\begin{bmatrix}1&k&0\\0&1&0\\0&0&1\end{bmatrix}\]

矩阵作用于列向量时,最右侧先执行,因此顺序是:缩放 → 剪切 → 绕 X 轴旋转 → 绕 Y 轴旋转 → 绕 Z 轴旋转 → 平移。这里的旋转按固定坐标轴依次执行。

剪切参数 $k$ 的作用是让缩放后的 x 坐标再增加 $k$ 倍的 y 坐标。因此,$HS$ 的第一行是 $[s_x,k s_y,0]$,这也解释了为什么剪切与 y 方向的缩放会共同影响矩阵中的同一个元素。

三维旋转的顺序通常不能交换。先绕 X 再绕 Y,与先绕 Y 再绕 X,得到的朝向一般不同;这个演示固定了顺序,方便比较参数变化。

再试两个小实验

  • 只改变平移:点击“复位”,再拖动 tx、ty、tz。观察矩阵最后一列,以及移动后立方体与局部轴原点的位置。
  • 比较缩放和剪切:点击“复位”,先单独改变 sx,再复位并单独改变 k。前者沿一个方向拉伸,后者使不同 y 位置的点产生不同的 x 位移。

本演示将三个缩放因子限制在 $0.4$ 到 $2$ 之间,避免零缩放造成退化,也不涉及负缩放产生的反射。矩阵显示保留两位小数,几何计算使用完整数值;画面会自动调整取景范围,因此判断大小变化时请对照灰色原始立方体。