齐次坐标#

“齐次”(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}} =

(1)#\[\begin{bmatrix} {}^A R_B & {}^A \mathbf{p}_{B_o} \\ \mathbf{0}^\top & 1 \end{bmatrix}\]

\cdot {}^B \tilde{\mathbf{p}} \quad \text{(4×4 齐次变换矩阵)} $

3 线性变换的严格定义#

线性变换 \( T: \mathbb{R}^n \to \mathbb{R}^m \) 必须满足两个核心条件:

  1. 可加性:对任意向量 \( \mathbf{u}, \mathbf{v} \in \mathbb{R}^n \),有 \( T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v}) \)

  2. 齐次性:对任意向量 \( \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) =

(2)#\[\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\]

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}) &=

(3)#\[\begin{bmatrix} k u_x \cos\theta - k u_y \sin\theta \\ k u_x \sin\theta + k u_y \cos\theta \end{bmatrix}\]

&= k \cdot

(4)#\[\begin{bmatrix} u_x \cos\theta - u_y \sin\theta \\ u_x \sin\theta + u_y \cos\theta \end{bmatrix}\]

&= 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 线性变换(旋转、缩放、剪切等):锚定原点,不漂移#

线性变换的核心特征是保持零向量不动,仅改变其他向量的方向、长度(或二者兼具),不破坏向量 “相对原点的位置关联”。

典型例子

  1. 平面旋转:将平面绕原点旋转 \( 30^\circ \),任意向量 \( (x,y) \) 被映射为 \( (\cos30^\circ \cdot x - \sin30^\circ \cdot y, \sin30^\circ \cdot x + \cos30^\circ \cdot y) \),原点 \( (0,0) \) 始终映射为自身。

  2. 比例缩放:将所有向量沿 \( x \) 轴拉伸 2 倍(变换式 \( T(x,y) = (2x, y) \)),原点 \( (0,0) \) 仍为 \( (0,0) \),仅非零向量的 \( x \) 坐标被放大。

  3. 剪切变换:沿 \( 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” 的 “亲缘关系” 内涵,又准确反映了其与线性变换的关联 —— 是 “像线性,但不止于线性” 的变换。