齐次坐标#
“齐次”(Homogeneous)的本质是通过引入一个额外的齐次项(homogeneous component),将三维空间中的点和向量统一表示为四维向量,从而将仿射变换(如旋转 + 平移)转化为单一的线性矩阵乘法。
1 直角坐标与齐次坐标的对应关系#
在三维空间中:
一个点(Point)的直角坐标为 3×1 向量:
\( {}^A \mathbf{p} = \begin{bmatrix} x \\ y \\ z \end{bmatrix} \)
其对应的齐次坐标为 4×1 向量:
\( {}^A \tilde{\mathbf{p}} = \begin{bmatrix} x \\ y \\ z \\ w \end{bmatrix}, \quad w \neq 0 \)
对应规则:
当 \( w \neq 0 \) 时,齐次坐标 \( [x, y, z, w]^\top \) 对应唯一的直角坐标:
\( \left[ \frac{x}{w},\ \frac{y}{w},\ \frac{z}{w} \right]^\top \)
同一个空间点有无穷多种齐次表示(只要比例一致)。例如,直角坐标 \( [3, 7, 0]^\top \) 对应的齐次坐标可以是:
\( [3,7,0,1]^\top,\quad [6,14,0,2]^\top,\quad [9,21,0,3]^\top,\quad \dots \)
这种“比例不变性”正是“齐次”一词的来源。
2 为什么需要齐次坐标?#
在直角坐标下:
旋转是线性变换,可通过 3×3 旋转矩阵实现:
\( {}^A \mathbf{p} = {}^A R_B \cdot {}^B \mathbf{p} \)
平移是非线性变换,需通过向量加法实现:
\( {}^A \mathbf{p} = {}^B \mathbf{p} + {}^A \mathbf{p}_{B_o} \)
若要将“旋转 + 平移”的复合变换写成单一矩阵乘法(便于链式计算和硬件加速),3 维直角坐标维度不足。
齐次坐标通过增加第 4 维,使平移也能被编码进矩阵,从而实现统一的线性表示:
$ {}^A \tilde{\mathbf{p}} =
\cdot {}^B \tilde{\mathbf{p}} \quad \text{(4×4 齐次变换矩阵)} $
3 线性变换的严格定义#
线性变换 \( T: \mathbb{R}^n \to \mathbb{R}^m \) 必须满足两个核心条件:
可加性:对任意向量 \( \mathbf{u}, \mathbf{v} \in \mathbb{R}^n \),有 \( T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v}) \)
齐次性:对任意向量 \( \mathbf{u} \in \mathbb{R}^n \) 和任意标量 \( k \in \mathbb{R} \),有 \( T(k\mathbf{u}) = k \cdot T(\mathbf{u}) \)
4 平移为什么是非线性变换?#
平移变换定义为:
\( T(\mathbf{p}) = \mathbf{p} + \mathbf{c}, \quad \mathbf{c} \neq \mathbf{0} \)
5 不满足可加性#
取 \( \mathbf{u} = [1,0,0]^\top \), \( \mathbf{v} = [0,1,0]^\top \), \( \mathbf{c} = [2,0,0]^\top \):
先加后变:
\( T(\mathbf{u} + \mathbf{v}) = T([1,1,0]^\top) = [1,1,0]^T + [2,0,0]^T = [3,1,0]^\top \)
先变后加:
\( T(\mathbf{u}) + T(\mathbf{v}) = ([1,0,0]^\top + [2,0,0]^\top) + ([0,1,0]^\top + [2,0,0]^\top) = [5,1,0]^\top \)
结果不等 ⇒ 可加性不成立。
5.1 不满足齐次性#
取 \( \mathbf{u} = [1,0,0]^\top \), \( k=2 \), \( \mathbf{c} = [2,0,0]^\top \):
先缩放后变:
\( T(k\mathbf{u}) = T([2,0,0]^\top) = [2,0,0]^T + [2,0,0]^T = [4,0,0]^\top \)
先变后缩放:
\( k \cdot T(\mathbf{u}) = 2 \cdot ([1,0,0]^\top + [2,0,0]^\top) = 2 \cdot [3,0,0]^T = [6,0,0]^\top \)
结果不等 ⇒ 齐次性不成立。
5.2 根本原因#
\( T(\mathbf{0}) = \mathbf{0} + \mathbf{c} = \mathbf{c} \neq \mathbf{0} \)
平移移动了原点,破坏了线性变换的底层结构。
6 旋转为什么是线性变换?#
旋转变换由矩阵乘法定义,天然满足线性变换的两个条件。以下以二维绕原点旋转为例验证。
6.1 旋转矩阵#
绕原点旋转 \( \theta \) 的矩阵为:
$ R(\theta) =
6.2 验证可加性#
对任意向量 \( \mathbf{u}, \mathbf{v} \):
\( \begin{aligned} R(\theta)(\mathbf{u} + \mathbf{v}) &= R(\theta)\mathbf{u} + R(\theta)\mathbf{v} \quad \text{(矩阵乘法满足分配律)} \end{aligned} \)
6.2.1 公式推导#
6.2.1.1 第一步:计算“先加后旋”(先算\( \boldsymbol{u}+\boldsymbol{v} \),再用\( R(\theta) \)乘)#
先求向量和:\( \boldsymbol{u}+\boldsymbol{v} = \begin{bmatrix} u_x + v_x \ u_y + v_y \end{bmatrix} \)
再对和向量旋转:
\( \begin{align*} R(\theta)(\boldsymbol{u}+\boldsymbol{v}) &= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} u_x + v_x \\ u_y + v_y \end{bmatrix} \\ &= \begin{bmatrix} (u_x + v_x)\cos\theta - (u_y + v_y)\sin\theta \\ (u_x + v_x)\sin\theta + (u_y + v_y)\cos\theta \end{bmatrix} \\ &= \begin{bmatrix} u_x\cos\theta + v_x\cos\theta - u_y\sin\theta - v_y\sin\theta \\ u_x\sin\theta + v_x\sin\theta + u_y\cos\theta + v_y\cos\theta \end{bmatrix} \tag{1} \end{align*} \)
6.2.1.2 计算“先旋后加”(先分别旋转\( \boldsymbol{u} \)和\( \boldsymbol{v} \),再相加)#
先分别旋转两个向量,再求和:
\( \begin{align*} R(\theta)\boldsymbol{u} + R(\theta)\boldsymbol{v} &= \begin{bmatrix} u_x\cos\theta - u_y\sin\theta \\ u_x\sin\theta + u_y\cos\theta \end{bmatrix} + \begin{bmatrix} v_x\cos\theta - v_y\sin\theta \\ v_x\sin\theta + v_y\cos\theta \end{bmatrix} \\ &= \begin{bmatrix} u_x\cos\theta - u_y\sin\theta + v_x\cos\theta - v_y\sin\theta \\ u_x\sin\theta + u_y\cos\theta + v_x\sin\theta + v_y\cos\theta \end{bmatrix} \tag{2} \end{align*} \)
6.2.1.3 对比结果#
**观察式(1)和式(2)的右边,两个向量的x分量、y分量完全相同,因此: **
\( R(\theta)(\boldsymbol{u}+\boldsymbol{v}) = R(\theta)\boldsymbol{u} + R(\theta)\boldsymbol{v} \)
6.2.2 数值验证(\( \theta = 90^\circ \)):#
\( \mathbf{u} = [1,0]^\top \), \( \mathbf{v} = [0,1]^\top \)
先加后旋:
\( R(90^\circ)([1,1]^\top) = [-1, 1]^\top \)
先旋后加:
\( R(90^\circ)\mathbf{u} + R(90^\circ)\mathbf{v} = [0,1]^\top + [-1,0]^\top = [-1,1]^\top \)
结果一致 ⇒ 可加性成立。
6.3 验证齐次性#
对任意向量 \( \mathbf{u} = [u_x, u_y]^\top \) 和标量 \( k \):
$ \begin{aligned} R(\theta)(k\mathbf{u}) &=
&= k \cdot
&= k \cdot R(\theta)\mathbf{u} \end{aligned} $
⇒ 齐次性成立。
7 线性变换的“隐形前提”——必须过原点#
所有线性变换都有一个隐含属性:将零向量映射到零向量(即\( T(\boldsymbol{0}) = \boldsymbol{0} \))。
验证如下:
根据齐次性,取\( k=0 \),则\( T(0 \cdot \boldsymbol{u}) = 0 \cdot T(\boldsymbol{u}) \implies T(\boldsymbol{0}) = \boldsymbol{0} \)。
而平移变换中,\( T(\boldsymbol{0}) = \boldsymbol{0} + \boldsymbol{c} = \boldsymbol{c} \neq \boldsymbol{0} \)(只要\( \boldsymbol{c} \)不为零)——这从根本上说明:平移会“偏移原点”,破坏线性变换“零向量不变”的底层逻辑,进一步印证其非线性本质。
7.1 数学定义:为什么线性变换必须 “过原点”?#
现在令标量 \( k = 0 \),代入齐次性条件推导:
\( T(0 \cdot \mathbf{u}) = 0 \cdot T(\mathbf{u}) \)
由于 \( 0 \cdot \mathbf{u} = \mathbf{0} \)(零向量),且 \( 0 \cdot T(\mathbf{u}) = \mathbf{0} \),因此可得:
\( T(\mathbf{0}) = \mathbf{0} \)
结论:任何线性变换都必须将向量空间的零向量(原点)映射到自身。
这就是 “必须过原点” 的严格数学含义 ——变换前后,零向量的位置保持不变,不能发生偏移。
这里的 “原点” 特指向量空间的零向量(代数概念),而非坐标系的物理原点(几何概念);仅在标准直角坐标系中,二者的坐标表示才重合(均为 \( (0,0) \)或 \( (0,0,0) \))。
7.2 几何直观:“过原点” 的变换长什么样?#
7.2.1 线性变换(旋转、缩放、剪切等):锚定原点,不漂移#
线性变换的核心特征是保持零向量不动,仅改变其他向量的方向、长度(或二者兼具),不破坏向量 “相对原点的位置关联”。
典型例子:
平面旋转:将平面绕原点旋转 \( 30^\circ \),任意向量 \( (x,y) \) 被映射为 \( (\cos30^\circ \cdot x - \sin30^\circ \cdot y, \sin30^\circ \cdot x + \cos30^\circ \cdot y) \),原点 \( (0,0) \) 始终映射为自身。
比例缩放:将所有向量沿 \( x \) 轴拉伸 2 倍(变换式 \( T(x,y) = (2x, y) \)),原点 \( (0,0) \) 仍为 \( (0,0) \),仅非零向量的 \( x \) 坐标被放大。
剪切变换:沿 \( x \) 轴剪切(变换式 \( T(x,y) = (x + ky, y) \),\( k \) 为常数),原点不变,仅向量在 \( x \) 方向的位置随 \( y \) 坐标线性变化。
这些变换的图形始终 “锚定” 在原点,不会出现整体平移或漂移。
7.2.2 非线性变换(平移等):移动原点,破坏线性#
平移是典型的 “不过原点” 的变换,其核心是将整个向量空间沿某一方向 “整体推移”,直接移动了零向量的位置,因此不属于线性变换。
典型例子:
平面平移变换 \( T(x,y) = (x + 2, y + 3) \):
对零向量 \( (0,0) \),变换后为 \( (0+2, 0+3) = (2,3) \neq (0,0) \),明显移动了原点;
对任意向量 \( (x,y) \),变换结果均增加了固定偏移量 \( (2,3) \),相当于把整个坐标系 “搬” 到了新位置。
图形整体偏移,不再 “过原点”,且不满足可加性(如 \( T((1,0)+(0,1)) = (1+2, 0+3) + (0+2, 1+3) = (3,3)+(2,4)=(5,7) \),而 \( T(1,0)+T(0,1)=(3,3)+(2,4)=(5,7) \) 看似满足,但本质是因为平移的偏移量固定,实际若结合数乘会发现不满足齐次性,如 \( T(2 \cdot (1,0)) = (2+2, 0+3) = (4,3) \),而 \( 2 \cdot T(1,0) = 2 \cdot (3,3) = (6,6) \),二者不相等)。
7.3 “过原点” 对线性变换的核心意义#
7.4 维系向量空间的基本结构#
线性变换的作用对象是向量空间,而向量空间的定义明确要求:必须包含零向量,且对向量加法、标量乘法运算封闭。若变换移动了零向量(即 \( T(\mathbf{0}) \neq \mathbf{0} \)),则变换后的集合不再包含原零向量,直接破坏了向量空间的封闭性,无法构成新的向量空间。
7.4.1 保证线性组合的保真性#
线性变换的核心优势是 “保持线性组合关系不变”,即对任意向量 \( \mathbf{u}, \mathbf{v} \) 和标量 \( a, b \),始终满足:
\( T(a\mathbf{u} + b\mathbf{v}) = aT(\mathbf{u}) + bT(\mathbf{v}) \)
若原点被移动(如平移),这种 “比例与叠加关系” 会被彻底破坏。例如:平面中点 \( (1,1) \) 是 \( (0,0) \) 与 \( (2,2) \) 的中点(即 \( (1,1) = \frac{1}{2}(0,0) + \frac{1}{2}(2,2) \)),经平移 \( T(x,y)=(x+2,y+3) \) 后,\( T(1,1)=(3,4) \),而 \( \frac{1}{2}T(0,0) + \frac{1}{2}T(2,2) = \frac{1}{2}(2,3) + \frac{1}{2}(4,5) = (3,4) \) 看似成立,但本质是平移的特殊性;若换为非线性变换(如 \( T(x,y)=(x^2,y) \)),则 \( T(1,1)=(1,1) \),而 \( \frac{1}{2}T(0,0) + \frac{1}{2}T(2,2) = \frac{1}{2}(0,0) + \frac{1}{2}(4,2) = (2,1) \neq (1,1) \),明显破坏了线性组合关系。
7.4.2 矩阵表示的必要前提#
所有有限维向量空间上的线性变换,都可通过矩阵乘法表示:若 \( T: \mathbb{R}^n \to \mathbb{R}^m \) 是线性变换,则存在 \( m \times n \) 矩阵 \( A \),使得对任意 \( \mathbf{x} \in \mathbb{R}^n \),有 \( T(\mathbf{x}) = A\mathbf{x} \)。
而矩阵乘法天然满足 \( A\mathbf{0} = \mathbf{0} \)(零向量与任意矩阵相乘仍为零向量),这恰好对应线性变换 “过原点” 的性质。反之,若变换需要移动原点(如平移),则无法用单一矩阵乘法表示,必须引入加法项(如 \( T(\mathbf{x}) = A\mathbf{x} + \mathbf{b} \),\( \mathbf{b} \neq \mathbf{0} \)),此时变换已不属于线性变换,而是更广的仿射变换。
这正是 “齐次坐标” 的设计初衷:通过将向量升维(如 2D 向量 \( (x,y) \) 变为 3D 齐次坐标 \( (x,y,z,1) \)),可将仿射变换
\( T(\mathbf{x}) = A\mathbf{x} + \mathbf{b} \)
嵌入到高维线性空间中,用单一矩阵乘法表示(如
\( \begin{bmatrix} x' \\ y'\\ 1 \end{bmatrix} = \begin{bmatrix} A & \mathbf{b} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \)
),从而让 “不过原点” 的变换在高维空间中 “看起来过原点”。
8 常见误解与澄清#
常见误解 |
正确理解 |
|---|---|
“旋转一个不在原点的物体,这个旋转就不过原点” |
线性变换的作用对象是向量(如物体上点相对于原点的位置向量),而非物理物体本身。若要让物体绕非原点旋转,需拆解为三步:① 将物体平移到原点(使旋转中心与原点重合);② 绕原点执行线性旋转;③ 将物体平移回原位置。整个过程是仿射变换(线性变换 + 平移),其中的旋转步骤仍是 “过原点” 的线性变换。 |
“只要缩放中心不在原点,缩放就不是线性变换” |
正确。以原点为中心的缩放(如 \( T(x,y)=(kx, ky) \),\( k \) 为常数)满足 \( T(\mathbf{0}) = \mathbf{0} \),是线性变换;若缩放中心为 \( (a,b) \)(非原点),则需先将物体平移到原点(\( (x,y) \to (x-a, y-b) \)),再缩放,最后平移回 \( (a,b) \),整个过程是仿射变换,而非纯线性变换。 |
“只要原点不动,变换就一定是线性变换” |
错误。原点不动是线性变换的必要条件,但不是充分条件。例如 1D 空间中的变换 \( T(x) = x^3 \),满足 \( T(0) = 0^3 = 0 \)(原点不动),但不满足齐次性(如 \( T(2x) = (2x)^3 = 8x^3 \),而 \( 2T(x) = 2x^3 \),\( 8x^3 \neq 2x^3 \)),因此是非线性变换。 |
“线性变换只能处理过原点的图形” |
线性变换可处理任意图形,但图形上点的位置向量需满足 “变换后原点不动”。若图形不过原点,其位置向量经线性变换后,图形的相对形状会保持(如旋转、缩放),但仍不会整体平移(例如三角形的三个顶点向量 \( \mathbf{u}, \mathbf{v}, \mathbf{w} \) 经线性变换后,新三角形的顶点为 \( T(\mathbf{u}), T(\mathbf{v}), T(\mathbf{w}) \),仍以原点为参考)。 |
9 其他:仿射化变的“仿射”是什么?#
“仿射变换” 中的 “仿射” 一词,源自英文 affine,其词根来自拉丁语 affinis,意为 “相关的”“有亲缘关系的”。在数学中,“仿射”(affine)描述的是一种保留 “直线性” 和 “比例性” 的几何变换,它比线性变换更广,但比任意非线性变换更结构化。
仿射变换 = 线性变换 + 平移操作。
它 “仿” 照线性变换的核心结构(保持直线、比例),但突破了 “必须过原点” 的限制,允许整体偏移 —— 这正是 “affine”(相关但不完全相同)一词的数学体现。
9.1 词源与直观含义#
Affine(仿射)≈ “保持亲缘关系”
在几何中,点之间的 “亲缘关系” 包括:
共线性(collinearity):三点在一条直线上,变换后仍在一条直线上;
比例性(ratio preservation):线段上的中点、三等分点等比例关系保持不变。
仿射变换不保持距离和角度,但保持这些 “仿射性质”,因此称为 “仿射”。
简单说:“仿射” = “像线性一样保持结构,但允许整体平移”。
9.2 数学定义#
一个变换 \( T: \mathbb{R}^n \to \mathbb{R}^m \) 是仿射变换,当且仅当它可以表示为:
\( T(\mathbf{x}) = A\mathbf{x} + \mathbf{b} \)
其中:
\( A \) 是一个 \( n \times n \) 的线性变换矩阵(如旋转、缩放、剪切矩阵);
\( \mathbf{b} \) 是一个 \( n \times 1 \) 的平移向量(常向量,与 \( \mathbf{x} \) 无关)。
关键特征:
当 \( \mathbf{b} = \mathbf{0} \)(零向量)时,仿射变换退化为线性变换(即 \( T(\mathbf{x}) = A\mathbf{x} \));
当 \( \mathbf{b} \neq \mathbf{0} \) 时,变换包含平移操作,不再满足线性变换的 “过原点” 要求,但仍是仿射变换。
9.3 仿射变换保持哪些性质?(“仿射” 的核心)#
仿射变换不保持的几何属性:
距离(线段长度)
角度(两线段的夹角)
图形形状的严格一致性(如圆可能变成椭圆,矩形可能变成平行四边形)
但严格保持以下 “仿射性质”,这也是 “仿射” 一词的核心内涵:
仿射性质 |
具体说明 |
直观例子 |
|---|---|---|
直线映射为直线 |
任意直线经过仿射变换后,仍为直线(不会弯曲成曲线) |
平面内的水平直线 \( y=1 \),经仿射变换后仍为某条直线 |
共线性 |
若三点在变换前共线(位于同一直线上),则变换后仍共线 |
点 \( (0,0),(1,1),(2,2) \) 共线,变换后仍在同一直线上 |
线段比例不变 |
线段上任意分点的比例关系,变换后保持不变 |
若点 \( C \) 是线段 \( AB \) 的中点(\( AC:CB=1:1 \)),则变换后 \( T(C) \) 仍是 \( T(A)T(B) \) 的中点 |
平行性 |
若两条直线变换前平行,变换后仍保持平行 |
矩形的对边平行,经仿射变换后成为平行四边形,对边仍平行 |
把一张矩形透明纸斜着投影到白色墙上,墙上的投影就是矩形经仿射变换后的结果 ——
原矩形的直角变成了锐角 (大于0°且小于90°的角)/ 钝角(大于90°且小于180°的角)(角度不保持);
原矩形的边长缩短或拉长(距离不保持);
但对边依然平行,各边中点仍是中点(仿射性质保持)。
9.4 为什么叫 “仿射”?中文翻译的深层含义#
英文 affine transformation 于 20 世纪初传入中国数学界,“仿射” 是其标准中文译名;
“仿” 字体现 “类似、模拟”:仿射变换模拟线性变换的 “结构保持性”(如直线、比例);
“射” 字体现 “映射、变换”:明确其属于几何变换的范畴;
合起来,“仿射” 即 “模拟线性变换的几何映射”,既保留了 “affine” 的 “亲缘关系” 内涵,又准确反映了其与线性变换的关联 —— 是 “像线性,但不止于线性” 的变换。