交比不变性:中心投影下的核心不变量及其工程应用
发布时间:2026/10/1 1:09:28来源:尧图网络
1. 四个点、一条线以及那个“怎么投都不变”的数第一次意识到交比不变性这东西到底有多“邪门”是我在大学学射影几何的时候。老师在黑板上画了一条直线点了四个点又随便在直线外取了一个投影中心把四个点通过中心投影到另一条直线上。肉眼可见的是四个点之间的距离全变了线段的比例也变了连哪一段是另一段的中点都变了——但是老师写下一个由这四个点的长度比组成的式子投影前后的数值一模一样。那一瞬间我意识到这可能是整个几何学里最接近“透视真相”的一条性质。交比不变性说的是一条直线上有四个点 A、B、C、D经过任意中心投影也就是从某个点把它们“照”到另一条直线上之后变成 A、B、C、D那么下面这个量不变[ (A,B;C,D)\frac{AC}{BC}\div\frac{AD}{BD} ]这里每条线段都要理解为有向线段符号由其方向决定。也就是说AC/BC 不再是我们熟悉的“长度比例”而是一个带着正负号的比值。如果只取长度绝对值交比的正负号会丢失后面很多几何判断就会出错这一点后面我会专门展开。这个量为什么重要简单说普通欧氏几何里中心投影会破坏几乎所有直观的度量性质——长度、角度、平行关系都可能在投影后面目全非。但交比是个例外它在投影后不动如山。正因为如此射影几何才得以建立起来先承认交比才是投影下真正不变的东西然后以它为工具重新讨论几何问题。我在这篇文章里会做三件事先用一个非常具体的坐标算例让你“看到”它不变再给出一个严格而简洁的坐标法证明弄清楚为什么中心投影本质上只是做了分式线性替换最后聊几个实际应用和非常容易踩的坑。就算是只学过高中数学的人跟着算一遍也能把这条定理吃透。2. 从一个具体投影算起距离变了交比没变先别急着看抽象证明。我们选一个最“暴力”的坐标系亲手算一遍。取投影中心 O 为原点 (0,0)第一条直线 l 是竖直线 x1第二条直线 l 是水平线 y1。这样设置的好处是计算足够简单而且两条直线显然不平行也没有经过原点所有投影都有明确的交点。直线 l 上的任意一点可以写成[ P(t)(1,t) ]其中 t 是它的纵坐标。现在把 P(t) 从原点投影出去也就是作射线 OP(t)与直线 l 求交点。射线上的点可以写成 λ(1,t)其中 λ 是比例参数。要求它落在 y1 上于是[ \lambda t1,\quad \lambda\frac{1}{t} ]交点的 x 坐标就是 λ所以 l 上的投影点为[ P(u)\left(\frac{1}{t},1\right) ]为了后面方便计算交比用 l 上的 x 坐标作为参数 u就有[ u\frac{1}{t} ]这就是中心投影在参数上的真实面目一次反比例映射。现在取 l 上的四个点参数为[ t_11,\quad t_22,\quad t_33,\quad t_44 ]按照交比定义[ (A,B;C,D)\frac{(t_3-t_1)}{(t_3-t_2)}\div\frac{(t_4-t_1)}{(t_4-t_2)} ]代入[ \frac{3-1}{3-2}\div\frac{4-1}{4-2} 2\div\frac{3}{2} \frac{4}{3} ]投影之后四个点的参数变为[ u_11,\quad u_2\frac{1}{2},\quad u_3\frac{1}{3},\quad u_4\frac{1}{4} ]再算一遍交比[ \frac{\frac13-1}{\frac13-\frac12}\div\frac{\frac14-1}{\frac14-\frac12} \frac{-\frac23}{-\frac16}\div\frac{-\frac34}{-\frac14} 4\div3 \frac{4}{3} ]投影前后的交比完全一致。这个算例虽然简单但已经把中心投影最重要的特征暴露出来了它把 t 映射成 1/t而正是这种“取倒数”型的变换会在交比的乘除对消中互相抵消掉。你可能会问这个例子太特殊了投影中心是原点两条直线互相垂直参数关系正好是 u1/t如果换一个一般的位置是不是还成立答案是仍然成立因为一般的中心投影在任意参数下导致的都是分式线性变换而不是简单的线性缩放。下一节就证明这件事。3. 坐标法完整证明中心投影就是一次分式线性替换这一节是整个证明的核心我会分成两半先证“中心投影在两个直线参数之间诱导的映射一定是分式线性函数”再证“任何分式线性函数都保持交比”。两条合在一起交比不变性就完整了。3.1 中心投影的参数变换为什么是分式线性的在平面上取任意一个仿射坐标系甚至可以直接把投影中心 O 取为原点。设直线 l 的参数表示为[ P(t)P_0t,d ]其中 P0 是 l 上某个固定点d 是 l 的方向向量。另一条直线 l 的参数表示为[ Q(s)Q_0s,e ]其中 Q0 是 l 上某固定点e 是 l 的方向向量。我们需要解决的是对于 l 上的点 P(t)从 O 发出的射线与 l 交于 Q(s)这个 s 关于 t 的函数是什么样的由于 Q(s) 在射线 OP(t) 上所以向量 Q(s) 和 P(t) 共线它们的叉积为零[ (Q_0s e)\times(P_0t d)0 ]展开这个式子[ Q_0\times P_0t(Q_0\times d)s(e\times P_0)st(e\times d)0 ]这是一个关于 s 的一次方程。把它整理成[ s(e\times P_0t,e\times d)-\big(Q_0\times P_0t,Q_0\times d\big) ]所以[ s\frac{-Q_0\times P_0-t(Q_0\times d)}{e\times P_0t(e\times d)} ]这里所有的“×”都是二维叉积结果是一个标量。分子分母都是 t 的一次函数因此 s 和 t 之间确实是分式线性关系[ s\frac{a tb}{c td} ]只要分母不为零。分母为零对应什么对应 t 取某个值时从 O 发出的射线与 l 平行而这个点会被投到 l 上的无穷远点。在普通的欧氏平面上这看起来是“没有交点”但在射影平面里这个点光明正大地存在下一节再展开。这个推导中我们完全没用到 l 和 l 是否平行、投影中心是否在直线中间等特殊性质所以结论是普适的任意中心投影在任意两条直线的仿射参数之间诱导的映射都是分式线性函数。3.2 分式线性函数保持交比的代数推导现在设原直线上四个点参数分别为 t1, t2, t3, t4投影后参数为[ t_if(t_i)\frac{a t_ib}{c t_id} ]计算任意两个投影参数的差[ f(t_i)-f(t_j) \frac{a t_ib}{c t_id}-\frac{a t_jb}{c t_jd} ]通分后分子为[ (a t_ib)(c t_jd)-(a t_jb)(c t_id) ad(t_i-t_j)bc(t_j-t_i) (ad-bc)(t_i-t_j) ]所以[ t_i-t_j\frac{(ad-bc)(t_i-t_j)}{(c t_id)(c t_jd)} ]有了这个漂亮的公式交比的验证就只剩下约分。记[ \Deltaad-bc ]投影后的交比为[ \frac{t_3-t_1}{t_3-t_2}\div\frac{t_4-t_1}{t_4-t_2} ]把 (t_i-t_j) 的表达式代进去。每一项都含 Δ且分母上带有四个不同的 (c t_id) 因子但我们不忙着展开而是先看第一组比[ \frac{t_3-t_1}{t_3-t_2}\frac{\Delta(t_3-t_1)}{(c t_3d)(c t_1d)} \cdot \frac{(c t_3d)(c t_2d)}{\Delta(t_3-t_2)} ]约分后[ \frac{t_3-t_1}{t_3-t_2}\cdot\frac{c t_2d}{c t_1d} ]同样地第二组比[ \frac{t_4-t_1}{t_4-t_2}\frac{t_4-t_1}{t_4-t_2}\cdot\frac{c t_2d}{c t_1d} ]两组比的公共因子 (\frac{c t_2d}{c t_1d}) 也约掉了最后剩下的正是[ \frac{t_3-t_1}{t_3-t_2}\div\frac{t_4-t_1}{t_4-t_2}\frac{t_3-t_1}{t_3-t_2}\div\frac{t_4-t_1}{t_4-t_2} ]这就在代数上完整地证明了交比不变性。整个过程没有任何几何直觉上的含糊唯一用到的核心事实是中心投影诱导的参数替换是分式线性函数而分式线性函数在两个点之间的“差分比”具有统一的伸缩结构。4. 为什么这个证明能覆盖无穷远点和所有射影变换如果你只学经典欧氏几何可能会觉得上面推出来的分母很碍眼。比如分母为零时点“投没了”怎么办这时候射影平面就该出场了。射影平面相比普通平面只是增加了一条无穷远直线让每条直线上都多了一个无穷远点。这样做不是无事生非而是为了让“投影到平行线”这种操作也有合法归宿。在齐次坐标的语言里直线上的参数 t 被写成比例 ([t:1])而无穷远点对应 ([1:0])也就是 (t\infty)。分式线性函数[ t\frac{a tb}{c td} ]写进齐次坐标就是[ \begin{bmatrix} T\S \end{bmatrix}\begin{bmatrix} ab\ cd \end{bmatrix} \begin{bmatrix} T\S \end{bmatrix} ]也就是说射影变换在直线上就是一次二维的线性变换不存在分母为零的尴尬。当 (t\infty) 时处理方式不过是用齐次坐标直接算结果等价于让原公式取极限。这样一来交比定义中即使某个点跑到无穷远也有明确的意义。举一个具体的极限例子。假设直线上四点里有第四个点是无穷远点交比定义变成[ (A,B;C,\infty)\lim_{t_4\to\infty}\frac{t_3-t_1}{t_3-t_2}\div\frac{t_4-t_1}{t_4-t_2} ]第二个大因子极限为 1所以[ (A,B;C,\infty)\frac{t_3-t_1}{t_3-t_2} ]这个式子表示三点比例可以被看成交比的一个极限情形。这解释了为什么仿射几何中“线段中点”的概念到了射影几何中会变成“该点与无穷远点构成调和点列”。更具体地说如果 C 是 AB 的中点那么[ (A,B;C,\infty)-1 ]交比为 -1 的四点叫调和点列。你看射影几何并没有抛弃“中点”这个概念而是把它重新解释成“关于无穷远点的调和共轭”。这种解释在投影变换下依然有效而普通的“中点”在中心投影下是会改变的。有了无穷远点前面那个分式线性证明的适用范围就完整了任意中心投影包括把某个点投到无穷远处的情况任意射影变换包括有限次中心投影的复合。射影几何有一个基本定理任何保持直线性的一一映射都可以由有限次中心投影复合得到。因此“交比不变性”并不是中心投影偶然具备的性质而是射影变换的基石性质。所有保持射影结构的变换都不得不遵守这个不变量。5. 交比在实战中会怎么出现从调和点列到相机标定可能有人觉得交比这种纯理论的东西除了写进教材还能干嘛实际上它在工程、摄影测量、计算几何里出现得非常频繁而且很多看似复杂的视觉问题最后都会回到“算一个交比”上面。5.1 调和点列最特殊也最有用的交比当交比等于 -1 时四点 A、B、C、D 被称为调和点列。几何证明中很多经典构型都隐藏着调和点列比如完全四边形的三条对角线被它们的交点分成调和关系再比如三角形角平分线与对边的交点、外角平分线与对边延长线的交点配合无穷远点也构成调和点列。为什么调和点列重要因为它是一个“射影性质”不依赖具体度量。如果你在证明两条线段的比例关系可以先通过射影变换把图形变到一个容易计算的位置然后利用交比不变性把结论映射回去。很多竞赛几何题看上去需要画七八条辅助线其实用调和点列一步就点破了。5.2 单视测距一张照片里怎么反推地面长度我在做图像测量相关工作时经常用到交比最直接的一个工程版本。相机拍照本质上就是一个中心投影地面上一组等距的点在照片里的间距一定是不均匀的。但如果你知道地面上某条直线上的四个点里有三个点的像的位置又知道其中两个点之间的真实比例就可以利用交比不变性把第四个点的位置反推出来。举个具体场景路边有一排路灯你在照片里能清楚看到三根灯柱的底部位置想知道第四根灯柱距离第一根灯柱多远。由于相机成像存在透视收缩直接量照片上的像素距离再等比例缩放是错的但如果能找到地面上的直线投影关系并已知三根灯柱之间的实际距离那么第四个灯柱的位置就可以通过交比公式解出来。这个方法称为“单视测距”在考古测绘、建筑测量、交通事故现场还原里仍然有人使用。更现代的用法出现在相机标定和视觉 SLAM 中。相机内参标定的一条经典路线就是寻找图像中某些共线特征点之间的交比约束一维标定物比如一条直线上等距分布的几个标记点被相机拍下后图像上的间距已经不是等距但交比不变用这个不变量去约束相机参数比直接计算像素距离稳定得多。5.3 为什么平面单应恰好需要四个对应点用过 OpenCV 的朋友都知道计算两幅图像之间的单应矩阵 H至少需要四个不共线的对应点。为什么是四个而不是三个这事其实和交比有关。平面上的射影变换可以看作先投影再投影的复合它保持直线也保持直线上任意四点的交比。三个对应点可以确定一个仿射变换但射影变换多了一个自由度需要第四个点来锁定这个额外的自由度。四个点给出更多约束本质上是把“射影变换不改变共线四点的交比”这个条件用满了。6. 动手验证的注意事项与常见坑符号、顺序和退化情况理论归理论真到自己写代码验证或者用交比做题时有几个坑非常容易踩。我在这里集中整理一下。6.1 有向线段符号丢不得交比定义里的线段全部是有向线段方向通常按整条直线的一个固定方向确定。假如你直接取长度绝对值那么交比可能差一个正负号。尤其在判断调和点列时必须要看到 -1 这个符号而不仅仅看数值是否为 1。我自己刚接触时就犯过这个错两个点在投影后分别位于投影中心的同侧和异侧符号会发生变化如果程序里用的是无向距离交比算出来完全不对。6.2 点的顺序不同交比值会变交比不是’四个点的对称函数它强烈依赖点的顺序。同一个四点组按 (A,B,C,D) 和按 (A,B,D,C) 得到的交比互为倒数按 (A,C,B,D) 又会得到别的值。总之四个点的 24 种排列只会产生 6 个不同的交比值。所以在阅读文献或引用别人的结论时一定要先确认对方采用的是哪一种标准排序。最常见的是 ((A,B;C,D)\frac{AC}{BC}\div\frac{AD}{BD})但也有很多教材写作 ((AB,CD)\frac{AC\cdot BD}{BC\cdot AD})本质上一样只是记号习惯不同。6.3 退化情况点重合、投影中心落在直线上如果出现两个点重合交比公式分母为零结果是无穷大或没定义这种情况单独处理。更隐蔽的退化是投影中心恰好落在原直线上这时所有点都投影到同一个点整个变换坍缩成常数映射交比不变性当然失效。实际应用中要保证投影中心不在输入直线上这是前提条件。6.4 一个可以直接跑起来的验证脚本如果你和我一样习惯用代码验证数学结论下面这段 Python 片段可以用最简单的方式确认交比在分式线性变换下的不变性import numpy as np def cross_ratio(t1, t2, t3, t4): return ((t3 - t1) * (t4 - t2)) / ((t3 - t2) * (t4 - t1)) def fractional_linear(t, a, b, c, d): return (a * t b) / (c * t d) # 输入直线上的四个点参数 ts np.array([1.0, 2.0, 3.0, 5.0]) print(原始交比:, cross_ratio(*ts)) # 用一个任意的分式线性变换模拟中心投影 a, b, c, d 2.0, -1.0, 0.5, 3.0 ts_p fractional_linear(ts, a, b, c, d) print(投影后交比:, cross_ratio(*ts_p))如果一切正常两次打印的结果会严格相等。你还可以把最后一个变换矩阵改成随机生成的检验结果仍然不变。这里要提醒一点用真实相机图像计算时像素坐标带有噪声点也不会严格共线最好先用 SVD 拟合一条直线再把每个点投影到这条直线上取参数而不是直接在原始坐标上算两两距离。这样得到的结果在噪声环境中会稳定得多。最后再分享一个我自己的经验面对任何与共线点相关的几何问题不管题目多复杂先写下交比算一算它是不是 -1、0、1 或某个已知值。很多时候一条看起来无从下手的难题其实就是某个隐藏调和点列的外在表现。交比不变性不只是射影几何课堂上的一道证明题它更像一把万能钥匙能帮你从混乱的透视变形中还原出真正不变的结构。
网站建设高端定制企业官网