仿射变换入门:从坐标、矩阵到椭圆与不变量
写在前面 仿射变换(affine transformation)是线性代数和几何之间非常实用的一座桥。它既可以解释“换坐标系后为什么同一个点会有不同坐标”,也可以解释图像处理中常见的平移、旋转、缩放、错切、投影近似和椭圆生成。理解仿射变换的关键不是记公式,而是把三件事分清: 点本身是几何对象,坐标只是它在某个坐标系下的表示。 矩阵描述的是“基向量如何被送到新的方向和尺度”。 仿射变换保持直线、平行性和线段比例,但通常不保持长度、角度和圆。 本文从最基础的坐标和矩阵讲起,然后推到直线、面积、圆锥曲线和实际编程。目标是:读完之后能把仿射变换用于推导,也能把它写进代码。 1. 坐标:点不变,表示会变 1.1 坐标依赖于基底 在平面直角坐标系 $xOy$ 中,点 $P=(4,3)$ 通常被理解为:从原点出发,沿 $x$ 轴正方向走 4 个单位,再沿 $y$ 轴正方向走 3 个单位。 用向量语言写,若 $\vec{i},\vec{j}$ 是标准正交基,则 $$ \overrightarrow{OP}=4\vec{i}+3\vec{j}. $$如果换一组基底,例如 $$ \vec{i}^{\prime}=2\vec{i},\qquad \vec{j}^{\prime}=\frac12\vec{j}, $$则同一个向量也可以写成 $$ \overrightarrow{OP}=2\vec{i}^{\prime}+6\vec{j}^{\prime}. $$所以同一个点在新基底下的坐标变成 $(2,6)$。这不是点移动了,而是表示方式变了。很多几何问题容易混乱,就是因为把“点的运动”和“坐标表示的改变”混在一起。 1.2 主动变换与被动变换 理解仿射变换时,建议区分两种视角: 主动变换:点真的被送到另一个位置。例如把图形旋转 30 度。 被动变换:点不动,只是观察它的坐标系变了。例如把坐标轴旋转 30 度。 两者公式很像,但矩阵方向往往相反。工程实践中,大多数图形库采用主动变换:给定点坐标 $x$,计算变换后的点 $x^{\prime}$。数学推导中,换基和坐标变换经常采用被动视角。写代码时必须确认自己使用的是列向量约定还是行向量约定,否则旋转方向、矩阵乘法顺序都会出错。 2. 线性方程组与行列式 2.1 二阶行列式的几何意义 二阶矩阵 $$ A= \begin{pmatrix} a & b \\ c & d \end{pmatrix} $$的行列式为 $$ \det(A)=ad-bc. $$它的几何意义是面积缩放因子。若两个基向量张成的平行四边形原面积为 1,经过矩阵 $A$ 变换后面积变成 $|\det(A)|$。符号则表示方向是否翻转:$\det(A)>0$ 保持方向,$\det(A)<0$ 翻转方向,$\det(A)=0$ 会把平面压扁到一条线或一个点。 ...