#sec-3-1
Concept
点、向量、标量:先分清几何类型
Vector
表示方向 + 大小,没有固定位置(例如:速度、力、位移)。
Scalar
普通数值,用来描述长度、比例和参数(例如:时间、温度、质量)。
#sec-3-2
Concept
标量:控制长度、比例和参数的“数”
标量不是空间中的位置,也不是方向;它是用来描述数量、比例、权重和参数的数值。
长度 / 距离
医学模型中两点间距离、器械前进深度、网格边长等都用标量描述。
distance
比例 / 缩放
模型归一化、单位换算、植入物模板尺寸调整,本质上都需要标量因子。
scale factor
参数 / 权重
线段插值、三角形内部点、颜色或属性插值,都通过参数控制位置或权重。
parameter
一句话:标量回答“多少”,点回答“在哪里”,向量回答“往哪里、多少长”。
#sec-3-3
Geometry Operations
点、向量、标量之间能做哪些运算?
很多图形错误并不是代码语法错,而是把不同几何类型混在一起使用。
有明确几何意义
P - Q:两个点之差得到一个向量
Q + v:点沿向量移动得到新点
u + v:两个向量相加得到新方向/位移
αv:用标量改变向量长度
需要警惕
P + Q:两个点通常不能直接相加
αP:单独用标量乘点通常没有几何意义
vec3:只是存储形式,不自动说明几何类型
课堂追问60 s
如果两个医学标志点 A 和 B 已知,B-A
在几何上代表什么?它可以用于描述器械方向吗?
#sec-3-4
Affine Space
仿射空间:把点、向量和标量组织起来
前面的运算规则可以统一理解为:我们在一个仿射空间中处理几何对象。
仿射空间包含什么?
- 点 Point:表示位置
- 向量 Vector:表示位移、方向和大小
- 标量 Scalar:表示比例、参数和权重
允许哪些基本操作?
- 两点相减:\(P-Q=\mathbf{v}\)
- 点加向量:\(Q+\mathbf{v}=P\)
- 向量线性组合:\(\alpha\mathbf{u}+\beta\mathbf{v}\)
\(P(\alpha)=P_0+\alpha\mathbf{d}\)
这就是用“一个点 + 一个方向向量 + 一个标量参数”描述直线、射线和线段的基本方式。
课堂互动60 s
在医学模型中,若 \(P_0\) 是器械入口点,\(\mathbf{d}\) 是器械方向,\(\alpha\)
可以表示什么?
#sec-3-5
Affine Sum
仿射和:为什么“点的加权和”有时是合法的?
虽然两个点通常不能随意相加,但当权重之和为1时,点的组合可以表示仍在仿射空间中的一个点。
两点之间的仿射和
\(P(\alpha)=(1-\alpha)P_0+\alpha P_1\)
当 \(0\le \alpha\le1\) 时,\(P(\alpha)\) 位于线段 \(P_0P_1\) 上。
一般形式
\(P=\sum_i \alpha_i P_i,\quad \sum_i\alpha_i=1\)
权重之和为1,是仿射和成立的关键条件。
为什么重要:线段插值、三角形内部点、重心坐标、颜色插值、表面采样都离不开仿射和。
快速判断45 s
若 \(P=0.2P_0+0.3P_1+0.5P_2\),它为什么可以表示三角形内部或边界上的一个点?
#sec-3-6
Plane / Face
面的表示:一个点和两个方向
在三维图形中,“面”是构成医学表面网格和三角形模型的基础对象。
方式一:一个点 + 两个向量
\(P(s,t)=P_0+s\mathbf{u}+t\mathbf{v}\)
其中 \(P_0\) 是面上的一个点,\(\mathbf{u}\)、\(\mathbf{v}\) 是面内两个不共线方向。
方式二:三个不共线点
\(\mathbf{u}=P_1-P_0,\quad \mathbf{v}=P_2-P_0\)
三个不共线点 \(P_0,P_1,P_2\) 可以确定一个平面,也可以确定一个三角形面片。
#sec-3-7
Triangle / Convex Hull
三角形与凸包:面片内部的点怎样表示?
三角形是GPU最常用的表面基本单元;其内部点可以用三个顶点的仿射和表示。
三角形面片
三个不共线点 \(P_0,P_1,P_2\)
不仅确定一个平面,也确定该平面上的一个有限区域:三角形。
\(\triangle P_0P_1P_2\)
凸包 / 重心形式
\(P=\alpha_0P_0+\alpha_1P_1+\alpha_2P_2\)
\(\alpha_0+\alpha_1+\alpha_2=1,\quad \alpha_i\ge 0\)
满足这些条件时,点 \(P\) 位于三角形内部或边界上。
#sec-3-8
Normal Vector
面的法线向量:表面“朝向哪里”?
法线向量描述面的朝向,是后续光照、可见性判断、表面方向分析的重要基础。
由两个面内向量得到
\(\mathbf{n}=\mathbf{u}\times\mathbf{v}\)
若 \(\mathbf{u}=P_1-P_0\),\(\mathbf{v}=P_2-P_0\),则:
\(\mathbf{n}=(P_1-P_0)\times(P_2-P_0)\)
为什么顺序重要?
交换顶点顺序会改变叉积方向,进而改变法线朝向。
这会影响背面剔除、光照明暗和医学表面方向判断。
orientation
#sec-3-9
Quick Check
随堂测试:哪些表达式有几何意义?
单选 / 多选
设 P、Q 是点,v、u 是向量。以下哪些表达式具有明确几何意义?
讨论后再给结论:A、B、C 有明确几何意义;D通常没有。
#sec-4-1
Representation
坐标不是对象本身
同一个医学模型中的同一个点,换一个参考系后,坐标数值可能变化,但几何对象本身并没有改变。
#sec-4-2
Coordinate-free Thinking
先有几何对象,再有坐标表示
一个表面点、一个方向、一个三角形,在选择坐标系之前就已经存在;坐标只是我们把它们交给程序处理时采用的表示。
几何对象
Point / Vector / Triangle
→
选择参考系
Origin + Basis
→
得到坐标数值
\(x, y, z\)
几何关系可保持
距离、角度、连接关系等可以不依赖某一个具体坐标系来理解。
程序必须使用表示
WebGL最终需要的是数值数组,因此必须明确这些数值属于哪个Frame。
学习本章的关键:不要把“对象本身”和“对象的坐标”混为一谈。
#sec-4-3
Frame
从坐标系到标架 Frame
坐标系只给出基向量;要描述点的位置,还需要原点。原点 +
基向量构成标架。
#sec-4-4
Basis
基向量:坐标其实是“组合系数”
在一个坐标系中,向量不是孤立的三个数,而是由一组基向量按比例组合得到。
向量的表示
\(v = \alpha_1 e_1 + \alpha_2 e_2 + \alpha_3 e_3\)
坐标 \((\alpha_1, \alpha_2, \alpha_3)\) 是向量在基 \((e_1, e_2, e_3)\) 下的表示。
点的表示还需要原点
\(P = P_0 + x e_1 + y e_2 + z e_3\)
没有原点 \(P_0\),仅靠基向量无法确定一个点的位置。
概念检查45 s
只改变基向量方向,不改变几何向量本身,它的坐标数值可能改变吗?为什么?
#sec-4-5
Medical Frames
医工场景中常见的三个标架
三维医学可视化中,同一个对象常常需要在多个标架之间被解释和转换。
Model Frame
模型坐标系:顶点通常在重建或建模时定义在这里。
local object
World Frame
世界坐标系:把模型放回具体医学空间。
anatomy space
View Frame
观察/相机坐标系:决定从哪个角度看见三维对象。
camera view
本课先解决 “对象如何表示”;后续课程会继续解决
“Frame之间如何变换”。
#sec-5-1
Homogeneous Coordinates Introduction
标架中的点与向量:齐次坐标从何而来?
在三维参考标架中,实际几何对象包括点(位置)与向量(方向)。但在代数表达与计算机中,它们都写成三个数——计算机该如何区分?
① 实际对象与数学表示
•
点 \(P\):如骨骼表面顶点,表示空间绝对位置,严格依赖标架原点。
•
向量 \(\mathbf{v}\):如表面法向或位移,表示方向与大小,独立于原点。
\(P = \begin{bmatrix} x \\ y \\ z \end{bmatrix},\quad \mathbf{v} = \begin{bmatrix}
\alpha \\ \beta \\ \gamma \end{bmatrix}\)
代码中均为 vec3(x, y, z)
② 如何区分?核心困境
若标架原点平移或对物体施加平移:
• 点的坐标数值必须改变;
• 向量的数值绝不能改变!
逻辑灾难:仅靠 3
个数,公式与硬件无法获知其几何属性,平移必然导致法向量被错误位移!
③ 标架展开引出齐次坐标
将标架原点 \(P_0\) 作为广义基底:
• 点需原点:\(P = P_0 + xe_1 + ye_2 + ze_3\)
• 向量无需原点:\(\mathbf{v} = 0\cdot P_0 + \alpha e_1 + \dots\)
\(\mathbf{p} = \begin{bmatrix} x \\ y \\ z \\ \mathbf{1} \end{bmatrix},\quad
\mathbf{v} = \begin{bmatrix} \alpha \\ \beta \\ \gamma \\ \mathbf{0}
\end{bmatrix}\)
第四分量 \(w\) 编码几何类型!
共同点
均在同一参考标架下度量;均由标架基底与原点展开生成;均统一存储为四维列向量并参与矩阵乘法。
不同点
点(\(w=1\))表示空间固定位置,与原点强绑定,受平移影响;向量(\(w=0\))表示方向与尺度,与原点解耦,具有平移不变性。
#sec-5-2
Definition & Convention
严格定义与列向量乘法标准
现代图形学(OpenGL、WebGL 2.0、DirectX
等)严格将三维几何对象定义为四维齐次列向量,并确立矩阵左乘标准。
严格数学定义
三维空间中的点 \(P(x,y,z)\) 与自由向量 \(\mathbf{v}(\alpha,\beta,\gamma)\)
对应齐次列向量:
\[\mathbf{p} = \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix},\quad \mathbf{v} =
\begin{bmatrix} \alpha \\ \beta \\ \gamma \\ 0 \end{bmatrix}\]
满足 \(w \ne 0\) 时,齐次坐标 \([x, y, z, w]^T\) 对应笛卡尔空间点 \((x/w, y/w,
z/w)\)。
列向量左乘统一标准
后续图形学流水线计算中,均以列向量左乘为唯一标准:
\[\mathbf{p}' = \mathbf{M} \cdot \mathbf{p} = \mathbf{M}_n \cdots \mathbf{M}_2
\mathbf{M}_1 \mathbf{p}\]
变换由右向左依次作用;GLSL 着色器标准写法:gl_Position = uP * uV * uM * aPos;
代数优势:统一了数据规格,矩阵乘法可预先连乘复合,无需针对点和向量编写两套分支代码。
#sec-5-3
Interactive Check
随堂测试:齐次坐标运算的几何代数规律
观察第四分量 \(w\) 的代数加减,齐次坐标天然保证了仿射运算的几何封闭性。
点 − 点 = 向量
\(1 - 1 = 0\)
两点相减,原点抵消,自动退化为方向向量。
点 + 向量 = 点
\(1 + 0 = 1\)
点沿向量位移,依然引用原点,结果仍为点。
向量 + 向量 = 向量
\(0 + 0 = 0\)
自由向量的合成,始终不携带原点。
点 + 点 = ?
\(1 + 1 = 2\)
\(w=2\) 无几何意义!除非是仿射和 \(\sum\alpha_i=1\)。
思考与回答45 s
在三角形重心坐标中,\(P = 0.3P_0 + 0.3P_1 + 0.4P_2\),为什么它的齐次分量计算后刚好是
\(w=1\)?
#sec-5-4
Homogeneous Matrix & Dimension Rule
齐次矩阵:维度匹配与 (d+1) 维行列构造
在 \(d\) 维空间中,齐次坐标为 \(d+1\)
维列向量。为了符合矩阵相乘的代数运算法则,变换矩阵相应地由 \(d\times d\) 升维至
\((d+1)\times (d+1)\);以三维图形学为例,即由 \(3\times 3\) 升维为 \(4\times 4\)。
① 齐次矩阵的分块扩展形式
\[ \mathbf{M}_{(d+1)\times (d+1)} = \begin{bmatrix} \mathbf{A}_{d\times d} &
\mathbf{t}_{d\times 1} \\ \mathbf{0}_{1\times d} & 1 \end{bmatrix} \]
\[ \xrightarrow{\text{三维空间特例}} \quad \mathbf{M}_{4\times 4} =
\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\ m_{21} & m_{22} & m_{23} &
m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ 0 & 0 & 0 & 1 \end{bmatrix} \]
左上角 \(d\times d\)(三维下为 \(3\times
3\))保留原线性变换核,用于旋转、缩放与坐标轴变换。
② 增补的一行与一列该如何设置?
新增第 \(d+1\) 列(最后一列)
设置为标架原点 \(P_0\) 的变换映射分量 \(\mathbf{t} = [m_{14}, m_{24},
m_{34}]^T\),专门承载与原点位置相关的度量。
新增第 \(d+1\) 行(最后一行)
固定设为 \([\mathbf{0}_{1\times d},\ 1] = [0, 0, 0,
1]\)。其作用是在乘法中维持齐次权重,使点变换后仍保持 \(w'=1\)、向量仍保持
\(w'=0\)。
行列设置精髓:最后一列专管“原点在哪里”,最后一行专管“权重是否维持为 1 或 0”。
思考与伏笔
最后一行为什么是 \([0,0,0,1]\)?如果最后一行的分量不全为零(例如包含非零的
\(m_{43}\)),乘法后 \(w'\)
会发生什么?——这正是后续透视投影与透视除法的奥秘所在!
#sec-5-5
Algebraic Action & Automatic Differentiation
齐次矩阵的作用:点与向量的代数运算与自动区分
将构造好的 \((d+1)\times(d+1)\)
齐次变换矩阵分别与点(\(w=1\))和向量(\(w=0\))相乘,观察代数规则如何天然区分几何属性。
① 作用于点(\(w = 1\)):位置吸纳原点分量
\[ \mathbf{M}\begin{bmatrix} \mathbf{x} \\ 1 \end{bmatrix} = \begin{bmatrix}
\mathbf{A} & \mathbf{t} \\ \mathbf{0} & 1 \end{bmatrix} \begin{bmatrix}
\mathbf{x} \\ 1 \end{bmatrix} = \begin{bmatrix} \mathbf{Ax} + \mathbf{t}\cdot
\mathbf{1} \\ \mathbf{0}\cdot\mathbf{x} + 1\cdot \mathbf{1} \end{bmatrix} =
\begin{bmatrix} \mathbf{Ax} + \mathbf{t} \\ \mathbf{1} \end{bmatrix} \]
\[ \xrightarrow{\text{三维展开}} \begin{bmatrix} m_{11}x + m_{12}y + m_{13}z +
m_{14} \\ m_{21}x + m_{22}y + m_{23}z + m_{24} \\ m_{31}x + m_{32}y + m_{33}z +
m_{34} \\ 1 \end{bmatrix} \]
-
最后一列 \(\mathbf{t}\) 与 \(1\)
相乘,直接参与新位置计算(反映原点映射对位置的影响)。
-
最后一行内积为 \(0\cdot x + 0\cdot y + 0\cdot z + 1\cdot 1 =
1\),严格保证结果仍然是点。
② 作用于向量(\(w = 0\)):方向自动屏蔽原点项
\[ \mathbf{M}\begin{bmatrix} \mathbf{v} \\ 0 \end{bmatrix} = \begin{bmatrix}
\mathbf{A} & \mathbf{t} \\ \mathbf{0} & 1 \end{bmatrix} \begin{bmatrix}
\mathbf{v} \\ 0 \end{bmatrix} = \begin{bmatrix} \mathbf{Av} + \mathbf{t}\cdot
\mathbf{0} \\ \mathbf{0}\cdot\mathbf{v} + 1\cdot \mathbf{0} \end{bmatrix} =
\begin{bmatrix} \mathbf{Av} \\ \mathbf{0} \end{bmatrix} \]
\[ \xrightarrow{\text{三维展开}} \begin{bmatrix} m_{11}\alpha + m_{12}\beta +
m_{13}\gamma \\ m_{21}\alpha + m_{22}\beta + m_{23}\gamma \\ m_{31}\alpha +
m_{32}\beta + m_{33}\gamma \\ 0 \end{bmatrix} \]
-
最后一列 \(\mathbf{t}\) 与 \(0\)
相乘,原点项被完全屏蔽(自由向量与标架原点位置解耦)。
-
最后一行内积为 \(0\cdot\alpha + 0\cdot\beta + 0\cdot\gamma + 1\cdot 0 =
0\),严格保证结果仍然是向量。
机制提炼:无需任何条件分支语句,代数乘法规则天然完成了几何区分——最后一列用于原点变换,最后一行用于维持齐次权重。
#sec-5-6
Interactive Demo
Demo:标架与齐次坐标显微镜
观察同一个几何对象在模型坐标系与世界坐标系下的不同表示,验证齐次坐标
\(w\) 分量的作用。
D04-01 · 教学仪器
HTML5 Canvas + WebGL
标架与齐次坐标显微镜
直观拖拽几何点与标架原点,实时计算各坐标分量,探究对象几何形态与坐标数值表示的本质关联。
🔹 标架交互:支持自由平移与旋转世界坐标系 (World Frame)
🔹 状态切换:点 (Point, \(w=1\)) 与向量 (Vector, \(w=0\))
实时对比
🔹 监视矩阵:同步输出局部与全局齐次坐标数值变化
课堂观察任务
3 min
带着问题观察与验证
-
拖动世界标架原点:观察表面点 \(P\)
的坐标数值是否改变?点本身在几何空间中的位置是否改变?
-
对比点与向量:在点 \(P\) 与方向向量 \(\mathbf{v}\)
之间切换,比较第四分量 \(w=1\) 与 \(w=0\) 的几何意义。
-
平移验证:平移标架原点时,点和向量的齐次坐标分别发生了什么?哪一个分量保持不变?
-
原理解释:为什么图形学必须给点加上 \(1\)、给向量加上 \(0\)?
💡 提示:重点观察右侧监视器中的 \(P_W\) 与 \(\mathbf{v}_W\)
在原点平移时的数值响应。
#sec-5-7
Frame Transformation
标架间的转换关系:矩阵如何连接两个标架?
从模型坐标系到世界坐标系、世界坐标系到观察/相机坐标系,本质上都是建立两个标架之间的映射矩阵。
标架映射的几何关系
设标架 \(A\) 的基底与原点在标架 \(B\) 中的齐次表示分别为:
\[\mathbf{u}_1^{(B)},\ \mathbf{u}_2^{(B)},\ \mathbf{u}_3^{(B)},\ O_A^{(B)}\]
则连接两个标架的变换矩阵 \(\mathbf{M}_{A \to B}\) 正是以这四个列向量直接拼合而成!
标架变换矩阵
\[ \mathbf{M}_{A \to B} = \begin{bmatrix} \mathbf{u}_1^{(B)} & \mathbf{u}_2^{(B)}
& \mathbf{u}_3^{(B)} & O_A^{(B)} \end{bmatrix} \]
任一点或向量在标架 \(B\) 中的坐标满足:\(\mathbf{c}_B = \mathbf{M}_{A \to B} \cdot
\mathbf{c}_A\)
核心洞见
矩阵的列向量就是新坐标轴方向与原点位置!求标架转换矩阵,就是确定原标架在目标标架下的表示。
#sec-5-8
Affine Consistency
仿射变换的一致性与多矩阵复合
“变换标架(换参考系)”与“变换物体(主动移动)”在齐次矩阵下具有完全统一的代数结构与极高的计算效率。
通用的仿射变换矩阵结构
\[ \mathbf{M}_{4\times 4} = \begin{bmatrix} \mathbf{R}_{3\times 3} &
\mathbf{t}_{3\times 1} \\ \mathbf{0}_{1\times 3} & 1 \end{bmatrix} \]
- 左上角 \(3\times 3\):控制旋转、缩放、错切与坐标系轴向。
- 右上角 \(3\times 1\):控制相对平移量与原点位移。
矩阵预先复合的巨大优势
\[\mathbf{M}_{final} = \mathbf{M}_k \cdots \mathbf{M}_2 \cdot \mathbf{M}_1\]
- 几十次平移、旋转与缩放,可在 CPU 端预先乘成一个单一矩阵。
-
GPU 面对百万顶点网格,每个顶点仅需一次矩阵乘法:\(\mathbf{p}' =
\mathbf{M}_{final}\mathbf{p}\)。
一致性总结:旋转、平移、标架变换、投影全部纳入 \(4\times 4\)
矩阵,是图形硬件能够高度流水线化的数学基石。
#sec-5-9
Graphics Pipeline
齐次坐标在流水线中的全链条应用
从模型装配、场景漫游到透视成像,图形流水线完全建立在齐次变换矩阵的链式传递之上。
模型变换 Model
模型坐标系 → 世界坐标系
将各个解剖模型缩放、旋转并摆放到统一的三维手术或场景空间中。
Model Matrix
观察变换 View
世界坐标系 → 观察/相机坐标系
以虚拟相机为中心和原点,对准观察视线,形成常说的模型视图矩阵。
View Matrix
投影变换 Projection
观察/相机坐标系 → 裁剪坐标系
构建视锥体,产生透视近大远小效果;输出
gl_Position 并由硬件执行透视除法。
Projection Matrix
模型坐标系
Model
→
世界坐标系
World
→
观察/相机坐标系
View
→
裁剪坐标系
Clip / NDC
#sec-5-10
AI Collaboration
AI协作研讨:齐次坐标在流水线中的“深层作用”
利用大模型辅助分析:如果只为了平移,齐次坐标值得在全流水线推行吗?深入探究它与透视投影的联系。
AI PROMPT
向AI提问:
“齐次坐标除了让平移能写进 \(4\times 4\) 矩阵外,在透视投影(Perspective
Projection)中扮演了什么不可替代的角色?”
要求AI必须回答:透视除法中 \(w\) 是如何与物体的景深 \(z\)
关联的,以及为什么非线性除法必须放在硬件流水线中。
研讨与验证要点
-
平移是第1层优势:统一仿射变换矩阵,列向量左乘保持代数一致性。
-
透视是第2层质变:透视投影中相机空间的 \(z\) 被送入齐次分量
\(w\);硬件随后执行除法 \((x/w, y/w)\),瞬间实现“近大远小”。
-
结论核验:齐次坐标是整个图形流水线将仿射几何与透视投影合二为一的终极钥匙。
方法总结:概念建模 → 矩阵统一 → 标架变换 → 硬件透视,齐次坐标贯穿了现代图形学的整个骨架。
#sec-5-11
Medical Loop & Closure
回到医工问题:医学模型为什么需要齐次坐标?
三维医学模型进入图形系统后,不只是被“看见”,还要被定位、对齐、观察和投影。
表面顶点
用 \(w=1\) 表示绝对位置,确保配准移动时跟随解剖实体定位。
表面法向量
用 \(w=0\) 表示方向,平移床位时不改变器官的光照法线。
模型对齐配准
用 Model Matrix 将 CT 网格精准对齐到手术台患者坐标系。
观察与透视
用 View/Proj 矩阵将内窥镜或 AR 眼镜视角呈现到屏幕上。
本节核心:齐次坐标绝非凭空制造的“第四个维度”,而是让几何对象类型区分、标架转换与 GPU 硬件流水线彻底统一的数学基石。