#sec-1
Computer Graphics · Chapter 4 · 02

基本几何变换:平移、旋转与缩放

仿射变换 · 刚体变换 · 平移矩阵 · 旋转矩阵 · 缩放矩阵

Local Mesh
→
Translation T
+
Rotation R
+
Scaling S
→
4×4 Affine Matrix
#sec-2-1
Medical-Engineering Problem

医工问题:虚拟器械如何放到目标位置?

在三维医学场景中,虚拟器械或植入物模型通常先定义在自己的局部坐标系中。如何将虚拟模型放置到正确的位置和姿态?

医疗器械定位问题
课堂预测60 s

至少要改变哪些量?

如果模型已经加载进程序,但没有对准目标区域,你认为需要调整哪些几何属性?

#sec-2-2
Prediction

把医工问题拆成三个几何问题

位置

目标点在哪里?

Translation

方向

目标轴向如何对齐?

Rotation

尺度

模型大小是否匹配?

Scaling
接下来先把复杂医学对象抽象成简单形体,研究这些变换的共同规律。
#sec-2-3
Abstraction

为什么先用简单形体?

复杂模型由大量顶点构成。只要理解一个点或一个简单形体如何变化,就能推广到整个网格。

复杂医学器械
→
单位立方体 / 箭头
→
点的变换规律
→
回到医学场景
教学约定:推导时使用点、箭头、正方形、立方体;应用时回到三维医学模型与器械定位。
#sec-2-4
Concept

Transformation:从 P 到 P′

变换可以看成一个函数:把一个点、一个向量或一组顶点映射到新的位置或状态。

P
→
T
→
P′
\[P′ = T(P)\]
在程序中,我们最终希望把这个映射写成矩阵乘法。
#sec-2-5
Affine Transform

仿射变换:为什么只需要变换顶点?

仿射变换的重要性质是:直线仍映射为直线,线段仍映射为线段。

图形学意义

三角形的三个顶点变换后,三角形内部点可由光栅化阶段继续生成。

仿射变换只处理顶点
\[P(\alpha) = (1-\alpha)P_0 + \alpha P_1 \implies T(P(\alpha)) = (1-\alpha)T(P_0) + \alpha T(P_1)\]
#sec-2-6
Rigid vs Non-Rigid

刚体、刚性变换与非刚性变换

说“刚体”时,重点不是对象材质,而是变换前后对象内部的相对几何关系是否保持不变。

刚体 / 刚性变换

对象像一个整体被移动或转动。

\[d(P_i,P_j)=d(P_i',P_j')\]

距离、角度、形状、体积保持不变。

Translation + Rotation

非刚体 / 非刚性变换

对象内部相对几何关系发生改变。

\[d(P_i,P_j)\ne d(P_i',P_j')\]

大小、比例、形状或局部结构可能变化。

Scaling / Shearing / Deformation
医工联系:刚性配准常用于“整体姿态调整”;非刚性变换则可能用于组织形变、模型模板适配或非均匀尺度调整。
#sec-2-7
Interaction · Classification

随堂判断:哪些操作保持“刚体”特征?

请判断下列操作属于刚性变换,还是非刚性/一般仿射变换。

A把三维骨骼模型整体平移到屏幕中心
B把虚拟探针绕目标方向旋转30°
C把植入物模板沿X方向拉长1.5倍
D对软组织表面做局部形变匹配
参考:A、B保持刚体特征;C、D会改变对象内部相对关系,属于非刚性或更一般的变换。
#sec-3-1
Translation · Geometry

平移:把每个点移动同一段位移

平移由位移向量决定。所有点获得同一个位移,因此对象的位置改变,但方向、大小和形状保持不变。

二维平面

\[ \begin{aligned} x' &= x+t_x \\ y' &= y+t_y \end{aligned} \]

位移向量:\(\mathbf{t}=(t_x,t_y)\)。

三维空间

\[ \begin{aligned} x' &= x+t_x \\ y' &= y+t_y \\ z' &= z+t_z \end{aligned} \]

位移向量:\(\mathbf{t}=(t_x,t_y,t_z)\)。

课堂提问

如果模型中有100万个顶点,平移时每个点获得的位移是否相同?这说明平移是否会改变形状?

#sec-3-2
Translation · Why Homogeneous

为什么普通二维矩阵不能直接表示平移?

普通\(2\times2\)线性矩阵只能产生\(x,y\)的线性组合;而平移还需要额外的常数项。

普通线性矩阵

\[ \begin{bmatrix}x'\\y'\end{bmatrix} = \begin{bmatrix}a&b\\c&d\end{bmatrix} \begin{bmatrix}x\\y\end{bmatrix} = \begin{bmatrix}ax+by\\cx+dy\end{bmatrix} \]

没有办法直接产生独立于\(x,y\)的\(t_x,t_y\)。

平移需要常数项

\[ \begin{bmatrix}x'\\y'\end{bmatrix} = \begin{bmatrix}x+t_x\\y+t_y\end{bmatrix} \]

因此需要增加一个固定分量,让矩阵乘法“带入”常数项。

这正是齐次坐标的意义:用增加的分量,把平移也纳入矩阵乘法。
#sec-3-3
Translation · 2D Homogeneous Matrix Derivation

二维齐次平移矩阵的代数推导

建立目标代数方程,从上到下按行展开,从左到右匹配对应项系数,严格确定 9 个矩阵元素。

逐行代数匹配方程

\[ \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ 1 \end{bmatrix} \]
第1行 (\(x'\)):\(m_{11}x + m_{12}y + m_{13}\cdot 1 = x + t_x\)
对任意 \((x, y)\) 恒成立 \(\implies \mathbf{[m_{11}, m_{12}, m_{13}] = [1, 0, t_x]}\)
第2行 (\(y'\)):\(m_{21}x + m_{22}y + m_{23}\cdot 1 = y + t_y\)
对任意 \((x, y)\) 恒成立 \(\implies \mathbf{[m_{21}, m_{22}, m_{23}] = [0, 1, t_y]}\)
第3行 (\(w'\)):\(m_{31}x + m_{32}y + m_{33}\cdot 1 = 1\)
齐次权重为常数 1 \(\implies \mathbf{[m_{31}, m_{32}, m_{33}] = [0, 0, 1]}\)

合成矩阵与代数本质

\[ \mathbf{T}(t_x, t_y) = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \]
左上角 \(2\times 2\) 单位阵:保持原始 \((x, y)\) 坐标尺度与旋转状态完全不变。
第3列 \([t_x, t_y]^T\):与齐次项 \(w=1\) 相乘,精准释放出常数位移量。
第3行 \([0, 0, 1]\):保证变换后的点仍保持 \(w'=1\) 的齐次表示。

小结:增补的第三维坐标 \(w=1\) 充当了“常数载体”,使非线性的平移巧妙转化为线性矩阵乘法。

#sec-3-4
3D Translation · Homogeneous Generalization

从二维到三维:齐次平移推广与分块结构

沿用逐行系数匹配的逻辑,三维齐次平移自然扩展为 4×4 矩阵,并呈现出优美的分块代数结构。

三维 4×4 齐次平移矩阵

\[ \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x \\ y + t_y \\ z + t_z \\ 1 \end{bmatrix} \]

• 前 3 行分别独立对 \(x, y, z\) 施加对应的位移分量 \(t_x, t_y, t_z\)。

• 第 4 行保持为 \([0, 0, 0, 1]\),维系刚体变换后的齐次标度 \(w'=1\)。

几何意义:无论二维还是三维,平移信息均精确落在增补的最后一列。

优雅的分块矩阵形式 (Block Form)

\[ \mathbf{T}(\mathbf{t}) = \begin{bmatrix} \mathbf{I}_{3\times 3} & \mathbf{t}_{3\times 1} \\ \mathbf{0}_{1\times 3} & 1 \end{bmatrix} \]
\(\mathbf{I}_{3\times 3}\):三阶单位阵,保持物体的原有姿态与尺寸;
\(\mathbf{t} = [t_x, t_y, t_z]^T\):最后一列平移向量,注入空间位移;
\(\mathbf{0}_{1\times 3}\) 与 \(1\):保证矩阵乘法后齐次标度保持为 1。
核心结论:三维变换统一表达为 \(4\times 4\) 矩阵,为后续连续复合变换奠定了代数基础。

深度思考:方向向量对平移“免疫”

若作用于方向向量 \(\mathbf{v}=[v_x,v_y,v_z,0]^T\),由分块乘法:\(\mathbf{T}\mathbf{v} = \begin{bmatrix}\mathbf{I} & \mathbf{t} \\ \mathbf{0} & 1\end{bmatrix}\begin{bmatrix}\mathbf{v} \\ 0\end{bmatrix} = \begin{bmatrix}\mathbf{I}\mathbf{v} + \mathbf{t}\cdot 0 \\ 0 + 1\cdot 0\end{bmatrix} = \begin{bmatrix}\mathbf{v} \\ 0\end{bmatrix}\)。自由向量无固定起点,平移零影响!

#sec-3-5
Quick Check

随堂测试:平移作用于谁?

单选

同一个平移矩阵 \(\mathbf{T}\) 作用于下面哪一个对象时,会产生位置偏移?

A点 \(\mathbf{p} = (x, y, z, 1)^T\)
B方向向量 \(\mathbf{v} = (x, y, z, 0)^T\)
参考答案:A。平移影响点 \(\mathbf{p}\) 的位置;自由向量 \(\mathbf{v}\) 表示方向和大小,不应额外获得平移分量。
#sec-4-1
Scaling · Geometry & Fixed Point

缩放:比例改变与不动点

缩放不只是“变大/变小”,其本质是改变点相对于缩放中心的距离分量;默认以原点为不动点。

缩放基本概念与不动点

几何定义:距离分量缩放

\[ x' = s_x x,\qquad y' = s_y y \]

每个坐标分量独立乘以缩放因子。原点 \(O(0,0)\) 缩放后依然为 \((0,0)\),是变换的不动点(缩放中心)。

均匀缩放 vs 非均匀缩放

• 均匀缩放 (\(s_x = s_y = s_z\)):各向等比,保持几何外形相似,无纵横形变。

• 非均匀缩放 (\(s_x \ne s_y\)):各轴向比例独立,会改变纵横比并导致形状拉伸变形。

核心注意:以原点为中心缩放时,物体不仅自身尺寸发生改变,其到原点的距离也会同比例缩放。
#sec-4-2
Scaling · Homogeneous Matrix

从二维缩放到三维齐次缩放

以原点为不动点时,缩放矩阵为纯对角结构,各主对角元独立控制对应维度的缩放比例。

二维齐次缩放矩阵 (3×3)

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} s_x x \\ s_y y \\ 1 \end{bmatrix} \]

• 主对角线直接缩放 \(x, y\) 坐标,不产生项间交叉(无旋转拉剪)。

• 最后一列均为 0,无常数平移位移;最后一行维持齐次权重 \(w'=1\)。

三维齐次缩放与分块结构 (4×4)

\[ \mathbf{S}(s_x,s_y,s_z) = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \mathbf{S}_{3\times 3} & \mathbf{0} \\ \mathbf{0} & 1 \end{bmatrix} \]

• 分块对照:平移矩阵改最后一列,缩放矩阵改主对角块 \(\mathbf{S}_{3\times 3}\)。

• 逆矩阵:只要 \(s_i \ne 0\),\(\mathbf{S}^{-1} = \operatorname{diag}(s_x^{-1}, s_y^{-1}, s_z^{-1}, 1)\)。

几何特性:缩放通常属于非刚性变换,它会改变点对之间的相对欧氏距离与模型的几何尺度。
#sec-4-3
Scaling · Center

缩放中心不是原点怎么办?

如果希望围绕模型中心 \(C\) 缩放,不能直接使用以原点为中心的 \(S\)。

\(T(-C)\)
移到原点
→
\(S\)
执行缩放
→
\(T(C)\)
移回原处
\[ M = T(C)\,S\,T(-C) \]

课堂练习

如果植入物模板以自身中心缩放,而不是以患者坐标原点缩放,为什么必须使用前后两次平移?

医工联系:调整植入物模板尺度时,通常希望围绕模型自身中心或指定参考点缩放。
#sec-5-1
Rotation · 2D Derivation

旋转:从二维平面完整推导一次

先研究点 \(P(x,y)\) 绕原点逆时针旋转 \(\theta\)。旋转保持原点距离不变,只改变方向角。

二维旋转几何推导

初始点极坐标表示

\[ x = r\cos\alpha,\qquad y = r\sin\alpha \]

点 \(P(x,y)\) 到原点距离为 \(r\),与 \(X\) 轴正向夹角为 \(\alpha\)。

逆时针旋转 \(\theta\) 后的极坐标

\[ x' = r\cos(\alpha+\theta),\qquad y' = r\sin(\alpha+\theta) \]

距离 \(r\) 保持恒定不变,角度增至 \(\alpha+\theta\)。目标:展开并消去参数 \(r, \alpha\)。

几何约束:旋转变换保持点到原点的距离不变(\(\|\mathbf{p}'\|=\|\mathbf{p}\|=r\)),属于保距保角的刚性变换。
#sec-5-2
Rotation · 2D Matrix Form

二维旋转矩阵:从代数展开到齐次矩阵

利用三角和角公式消去参数 \(r\) 与 \(\alpha\),得到线性方程并无缝升维为 3×3 齐次形式。

代数展开与 2×2 线性矩阵

\[ \begin{aligned} x' &= r(\cos\alpha\cos\theta - \sin\alpha\sin\theta) = x\cos\theta - y\sin\theta \\ y' &= r(\sin\alpha\cos\theta + \cos\alpha\sin\theta) = x\sin\theta + y\cos\theta \end{aligned} \]
\[ \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \]
90° 特殊值检验:令 \(\theta=90^\circ\),\(\mathbf{R}(90^\circ)\begin{bmatrix}1\\0\end{bmatrix} = \begin{bmatrix}0\\1\end{bmatrix}\),符合逆时针旋转。

二维 3×3 齐次旋转矩阵

\[ \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \]

• 结构特征:左上角承载纯平面旋转;第 3 列为 0,绕原点无位移。

• 逆变换(正交性):旋转 \(-\theta\) 即为逆操作,逆矩阵直接等于转置: \[ \mathbf{R}^{-1}(\theta) = \mathbf{R}(-\theta) = \mathbf{R}^T(\theta) \]

刚体性质:行列式 \(\det(\mathbf{R}) = \cos^2\theta + \sin^2\theta = 1\),变换前后图形面积与手性严格守恒。
#sec-5-3
Rotation · 3D Extension

从二维旋转扩展到三维空间

二维平面内绕原点旋转,可以看作三维空间中绕 \(Z\) 轴旋转:\(x,y\) 发生旋转,\(z\) 坐标严格保持不变。

绕 Z 轴旋转的坐标关系

\[ \begin{aligned} x' &= x\cos\theta - y\sin\theta\\ y' &= x\sin\theta + y\cos\theta\\ z' &= z \end{aligned} \]

旋转轴上的坐标 \(z\) 不发生改变,垂直于旋转轴的 \(X\)-\(Y\) 平面内执行标准二维旋转。

4×4 齐次旋转矩阵

\[ \mathbf{R}_z(\theta)= \begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

第 3 行与第 3 列为 \([0,0,1,0]\),精确锁定 \(z\) 分量与齐次标度不变。

三维旋转核心:绕哪根轴转,就保留该轴分量不变,并在与其垂直的平面内执行二维标准旋转。
#sec-5-4
Rotation · Axes

三维空间:绕不同坐标轴的旋转矩阵

三维旋转必须明确旋转轴与正方向。不同旋转轴对应不同的不变分量,正旋转角 \(\theta\) 由右手定则严格决定。

绕 X 轴 \(\mathbf{R}_x(\theta)\)

绕X轴旋转视图

从 \(+X\) 轴看向原点,由 \(Y\to Z\) 为逆时针正向(\(x\) 保持不变)。

\[ \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & \cos\theta & -\sin\theta & 0\\ 0 & \sin\theta & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

绕 Y 轴 \(\mathbf{R}_y(\theta)\)

绕Y轴旋转视图

从 \(+Y\) 轴看向原点,由 \(Z\to X\) 为逆时针正向(注意符号翻转!)。

\[ \begin{bmatrix} \cos\theta & 0 & \sin\theta & 0\\ 0 & 1 & 0 & 0\\ -\sin\theta & 0 & \cos\theta & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

绕 Z 轴 \(\mathbf{R}_z(\theta)\)

绕Z轴旋转视图

从 \(+Z\) 轴看向原点,由 \(X\to Y\) 为逆时针正向(与标准二维旋转一致)。

\[ \begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]
右手定则视角判断:大拇指指向该坐标轴正向,四指弯曲方向即为正旋转角 \(+\theta\)(从正轴沿黑箭头朝原点望去为逆时针)。绕 \(Y\) 轴时由循环顺序 \(Z\to X\) 决定,导致 \(\sin\theta\) 符号与另外两轴位置互换。
#sec-5-5
Rotation · Center

旋转中心很重要:绕原点还是绕目标点?

很多医工任务不是“绕世界原点旋转”,而是希望器械围绕目标入口点、关节中心或模型中心旋转。

\(T(-C)\)
把中心移到原点
→
\(R(\theta)\)
执行已知旋转
→
\(T(C)\)
把中心移回原处
\[ M = T(C)\,R(\theta)\,T(-C) \]

连接下一课

这个公式已经不是单个基本变换,而是多个矩阵的组合。下一课要重点讨论:为什么顺序不能交换?

复杂旋转策略:“平移中心至原点 → 执行已知旋转 → 沿原向量平移恢复”,复合变换从右向左依次作用。
#sec-5-6
AI Collaboration

AI协作:旋转矩阵敢直接用吗?

AI协作任务

让AI推导二维点绕原点逆时针旋转 \(\theta\) 的矩阵,并要求它解释 \(\sin\theta\) 项的正负号。

  1. 用特殊值 \(\theta = 90^\circ\) 检查。
  2. 验证 \((1,0) \to (0,1)\)。
  3. 再用 D04-02 观察图形结果。
工程把关:AI 可以高效推导代数公式,但旋转方向(左右手系)、行优先/列优先乘法约定必须由工程师严格核验。
#sec-6-1
Interactive Demo

Demo:基本变换矩阵实验台

分别调整平移 (T)、旋转 (R)、缩放 (S) 参数,实时观察顶点坐标、\(4\times 4\) 齐次矩阵与三维形体姿态响应。

D04-02 · 教学仪器 HTML5 Canvas + WebGL 交互实验

基本变换矩阵实验台

直观操控三维几何体,同步观察 \(4\times 4\) 矩阵数值动态变化与顶点变换计算,打通代数矩阵与空间几何直觉。

🔹 三维变换调节:独立调节平移 (\(t_x, t_y, t_z\))、旋转 (轴向与角度 \(\theta\))、缩放 (\(s_x, s_y, s_z\))
🔹 对象属性切换:几何点 (Point, \(w=1\)) 与方向向量 (Vector, \(w=0\)) 变换差异实时监视
🔹 矩阵实时解算:同步输出 \(4\times 4\) 矩阵各元素,直观呈现主对角线与最后一列
课堂观察任务 3 min

带着问题观察与验证

  1. 平移与不动点观察:调节 \(t_x, t_y, t_z\),观察点 \(P\) 的坐标变化,原点是否随之发生视觉偏移?
  2. 点与向量分界验证:切换 Point (\(w=1\)) 与 Vector (\(w=0\)),验证方向向量为何对平移完全“免疫”。
  3. 绕轴旋转与正负号:切换绕 \(X, Y, Z\) 轴旋转,验证右手定则正方向,注意绕 \(Y\) 轴旋转时矩阵符号的对称特征。
  4. 缩放中心与比例形变:对比均匀缩放与非均匀缩放,观察物体自身尺寸及距原点距离的同步放大。
💡 提示:重点观察中间参数面板的 \(4\times 4\) 矩阵数值高亮,建立代数元素与三维图形运动的一一映射。
#sec-6-2
Closure

从简单形体回到医工场景

虚拟器械的定位,本质是给同一组顶点施加不同的变换矩阵。

Unit Tool
→
Scale
→
Rotate
→
Translate
→
Patient Scene

位置

Translation决定对象放到哪里。

方向

Rotation决定轴向如何对齐。

尺度

Scaling决定模型大小是否匹配。

#sec-6-3
Summary

本课时小结:基本变换与齐次矩阵

本课从虚拟器械定位问题出发,建立了从概念到矩阵的基本变换框架。

概念层

变换是点到点、向量到向量的映射;仿射变换保持直线结构。

性质层

刚性变换保持距离、角度、形状和体积;非刚性变换可能改变大小、比例或形状。

矩阵层

平移、缩放、旋转都可以在齐次坐标中统一为矩阵乘法。

核心结论:二维公式帮助理解几何意义,三维齐次矩阵帮助进入WebGL实现;中心点和旋转轴决定变换结果。
#sec-6-4
Quick Check

随堂测试:识别变换类型

判断

将虚拟器械沿目标通道方向对齐,主要对应哪类变换?

ATranslation
BRotation
CScaling
参考答案:B。方向对齐主要依赖旋转;若还要放到目标点,则需要继续组合平移。