3. 共轴球面系统:转面公式、系统矩阵法、等效焦距与主平面计算

好,我们进入第三章。前面两章我们搞清楚了单个球面的折射、反射,以及近轴区的成像规律。但实际镜头,哪有单片的?你随便拆个手机摄像头,里面至少五六片镜片。所以这一章,咱们就得把单个球面串起来,组成一个共轴球面系统。

说白了,就是多个球面共享同一条光轴。我当年刚入行时,觉得这不就是重复算嘛。结果一上手,发现转面计算能把你算到怀疑人生。后来学了矩阵法,才算是真正解放了双手。嗯,咱们一步步来。

3.1 转面公式:把光线从上一个面“传”到下一个面

先看最基础的东西。假设系统有 k 个折射面,光线在第 i 个面上的入射高度是 hi,出射角度是 u'i。那光线怎么跑到第 i+1 个面上去?

很简单,几何关系:

h_{i+1} = h_i - d_i * u'_i

其中 di 是第 i 面顶点到第 i+1 面顶点之间的轴向距离。注意符号:光线向右传播,di 为正;u'i 是光线与光轴的夹角,近轴近似下用弧度值。

这就是转面公式。它把第 i 面的出射参数,变成了第 i+1 面的入射参数。你想想看,整个系统就是靠这个公式,一层一层往下传的。

我的习惯:做手工计算时,我会列一张表格,每一行是一个面,列分别是 h、u、u'、d。这样光线追迹一目了然,哪里出错也能快速定位。

3.2 系统矩阵法:把整个系统装进一个 2×2 矩阵

转面公式虽然直观,但面一多,手工算起来又慢又容易错。我建议你直接上系统矩阵法。

每个光学元件(折射面、平移空间)都可以用一个 2×2 矩阵表示。光线状态用列向量 [h; n*u] 表示,其中 n 是折射率,u 是近轴角度。

三个基本矩阵:

矩阵 符号 形式 物理意义
折射矩阵 R [1, 0; -Φ, 1] 光线经过折射面,光焦度 Φ = (n' - n)/r
平移矩阵 T [1, d/n; 0, 1] 光线在均匀介质中传播距离 d
反射矩阵 M [1, 0; -2/r, 1] 反射面,注意符号约定

整个系统的矩阵 S,就是按光线传播顺序,从右到左相乘:

S = R_k * T_{k-1} * R_{k-1} * ... * T_1 * R_1

注意顺序!矩阵乘法不满足交换律。我刚开始学的时候,顺序搞反过,算出来的焦距符号都是反的,查了半天才发现。

最终系统矩阵的形式是:

S = [A, B; C, D]

其中 A、B、C、D 四个元素,包含了系统的全部近轴光学信息。

核心要点:系统矩阵法把复杂的逐面计算,变成了矩阵乘法。你只需要写出每个面的 R 和 T,然后乘起来。计算机处理矩阵乘法,比手工追迹快几个数量级。

3.3 等效焦距与主平面:从矩阵元素直接读出

好,系统矩阵算出来了。那这个系统的等效焦距 f' 和主平面位置怎么求?

直接从矩阵元素 C 就能得到:

f' = -1 / C

没错,就这么简单。C 就是系统矩阵的第三元素(第二行第一列)。它的物理意义是系统的总光焦度,取负倒数就是像方焦距。

物方焦距 f 呢?

f = 1 / C

注意符号:f' 和 f 互为相反数,因为系统矩阵的 det(S) = n1/n'k,在物像空间折射率相同时,det(S)=1。

主平面位置的计算稍微复杂一点,但也不难:

  • 像方主平面 H' 到最后一个折射面顶点的距离:l'_H = (D - 1) / C
  • 物方主平面 H 到第一个折射面顶点的距离:l_H = (1 - A) / C

有了 f' 和主平面位置,你就可以把整个复杂系统,等效成一个单个薄透镜来处理。这就是系统矩阵法的威力——化繁为简。

我曾经踩过的坑:计算主平面位置时,一定要注意参考点的选择。l'_H 是从最后一个面顶点算起,l_H 是从第一个面顶点算起。搞混了,主平面位置就全错了。另外,如果系统中有反射面,矩阵的符号约定要统一,我建议全程使用右手坐标系。

3.4 知识结构图:共轴球面系统的核心逻辑

下面这张图,把本章的知识脉络串起来了。你可以把它当作一个快速索引。

共轴球面系统核心逻辑 共轴球面系统 转面公式 系统矩阵法 等效焦距与主平面 h_{i+1} = h_i - d_i * u'_i 逐面传递光线参数 适合手工少量计算 S = R_k * T_{k-1} * ... * R_1 2×2 矩阵乘法 适合编程批量计算 f' = -1/C l'_H = (D-1)/C 从矩阵元素直接提取 系统等效参数:f, f', H, H' 简化为单个薄透镜,进行成像分析 三种方法本质等价,系统矩阵法最通用,适合计算机实现

3.5 实战:双胶合透镜的系统矩阵计算

光说不练假把式。咱们拿一个经典的双胶合透镜来算算。

参数如下:

面号 曲率半径 r (mm) 间隔 d (mm) 折射率 n
1 50 5 1.5
2 -50 3 1.6
3 平面 (∞) — 1.0 (空气)

计算步骤:

  1. 面1折射矩阵:Φ1 = (1.5 - 1)/50 = 0.01,R1 = [1, 0; -0.01, 1]
  2. 面1到面2平移矩阵:T1 = [1, 5/1.5; 0, 1] = [1, 3.333; 0, 1]
  3. 面2折射矩阵:Φ2 = (1.6 - 1.5)/(-50) = -0.002,R2 = [1, 0; 0.002, 1]
  4. 面2到面3平移矩阵:T2 = [1, 3/1.6; 0, 1] = [1, 1.875; 0, 1]
  5. 面3折射矩阵:Φ3 = (1 - 1.6)/∞ = 0,R3 = [1, 0; 0, 1](单位矩阵)

系统矩阵:

S = R_3 * T_2 * R_2 * T_1 * R_1

   = [1, 0; 0, 1] * [1, 1.875; 0, 1] * [1, 0; 0.002, 1] * [1, 3.333; 0, 1] * [1, 0; -0.01, 1]

   计算结果:
   A ≈ 0.9938
   B ≈ 5.2083
   C ≈ -0.0080
   D ≈ 0.9583

等效焦距:

f' = -1 / C = -1 / (-0.0080) = 125 mm

像方主平面位置(距最后一个面顶点):

l'_H = (D - 1) / C = (0.9583 - 1) / (-0.0080) = 5.21 mm

你看,整个系统等效成一个焦距 125mm 的薄透镜,主平面在最后一个面右侧 5.21mm 处。有了这两个参数,后续的成像计算就简单了。

我的经验:实际工程中,我很少手工算矩阵乘法。我会用 Python 的 NumPy 或者 MATLAB 来算。但理解矩阵的物理意义很重要——A 是角放大率的倒数,D 是横向放大率的倒数,C 是光焦度,B 是等效厚度。这四个参数,你闭着眼睛都要能说出来。

3.6 避坑指南:新手最容易犯的三个错误

  • 矩阵乘法顺序搞反:光线从第一个面进入,最后一个面射出。矩阵乘法要从右往左乘。我见过有人从左往右乘,结果算出来的焦距符号都是反的。
  • 折射率符号搞混:折射矩阵中的光焦度 Φ = (n' - n)/r,注意是出射折射率减入射折射率。反射面要单独处理,用反射矩阵。
  • 主平面参考点搞错:l'_H 是从最后一个面顶点算起,l_H 是从第一个面顶点算起。不是从主平面本身算起,也不是从像面算起。

嗯,这一章的内容就到这儿。系统矩阵法是个好东西,你掌握了它,后面分析复杂光学系统就会轻松很多。