3. 近轴光学与矩阵光学:近轴近似、光线追迹矩阵、ABCD矩阵、系统矩阵与成像条件

各位好,欢迎来到第三章。这一章我们聊点硬核但非常实用的东西——近轴光学与矩阵光学。

说实话,我刚入行那会儿,觉得光线追迹就是拿软件跑一跑,谁还手算啊?直到有一次,我在调试一个高倍变焦投影镜头时,发现优化器怎么都收敛不到理想解。后来我耐着性子,用矩阵光学把系统的近轴参数捋了一遍,才发现是初始结构里一个镜组的等效焦距符号搞反了。嗯,从那以后,我再也不敢小看这些“老古董”理论了。

你想想看,一个复杂的光学系统,少说十几片透镜。如果每根光线都要用精确的折射定律去算,那计算量是天文数字。但如果我们只关心光线在光轴附近的行为,事情就简单多了。这就是近轴近似的核心思想。

3.1 近轴近似:把复杂问题简单化

近轴近似,说白了就是只考虑那些与光轴夹角很小、离光轴高度也很小的光线。在这种条件下,我们可以用一个小角度本身(弧度制)来近似它的正弦值和正切值。

核心近似公式:

  • sin θ ≈ θ
  • tan θ ≈ θ
  • cos θ ≈ 1

这个近似,把非线性的折射定律,变成了一组线性方程。

为什么会这样?因为当角度很小时,sinθ 的泰勒展开第一项就是 θ。这个近似带来的好处是巨大的:光线在空间中的传播和在界面上的折射,都可以用简单的线性代数来描述。

我的经验: 近轴近似虽然是个近似,但它给出了系统的“一阶特性”。我习惯在开始详细设计前,先用近轴光学算一遍系统的焦距、主面位置和像面大小。这能帮我快速判断初始结构是否合理,避免在错误的路上越走越远。

3.2 光线追迹矩阵:用向量描述光线

在近轴近似下,我们可以用两个参数来描述一根光线在某个平面上的状态:

  • y:光线离光轴的高度
  • α:光线与光轴的夹角(近轴近似下,α ≈ tan α)

这两个参数组成一个列向量:[y, α]^T。光线在光学系统中的传播和折射,就变成了对这个向量的线性变换。

我个人习惯把光线向量想象成一个“状态”,它每经过一个光学元件,状态就会更新一次。而更新这个状态的“操作符”,就是我们要讲的矩阵。

3.3 ABCD矩阵:光学元件的“身份证”

每个光学元件或一段自由空间,都可以用一个 2x2 的矩阵来表示。这个矩阵就是 ABCD 矩阵,也叫传输矩阵。

它的通用形式是:

| A  B |
| C  D |

光线经过这个元件后,新的状态 [y', α']^T 等于矩阵乘以旧状态 [y, α]^T。

下面这张表,是我做设计时最常用的几个基本矩阵,建议你收藏:

光学元件 ABCD 矩阵 说明
自由空间传播(距离 d) | 1 d |
| 0 1 |
光线高度变化,角度不变
薄透镜(焦距 f) | 1 0 |
| -1/f 1 |
光线高度不变,角度改变
平面折射(折射率 n1 到 n2) | 1 0 |
| 0 n1/n2 |
光线高度不变,角度按斯涅尔定律变化
球面折射(曲率半径 R) | 1 0 |
| (n2-n1)/(R*n2) n1/n2 |
同时改变高度和角度

注意: 矩阵的乘法顺序是从右到左。如果光线先经过元件 A,再经过元件 B,那么系统矩阵是 M = M_B * M_A。我曾经在这里犯过错,算出来的像面位置差了十万八千里,排查了半天才发现是矩阵乘反了。

3.4 系统矩阵:把整个系统串起来

一个光学系统由多个元件组成。我们只需要把每个元件的 ABCD 矩阵,按照光线经过的顺序相乘,就能得到整个系统的系统矩阵。

假设系统由 N 个元件组成,光线依次经过 M1, M2, ..., MN,那么系统矩阵 M_sys 为:

M_sys = M_N * ... * M_2 * M_1

这个系统矩阵,浓缩了整个光学系统的近轴特性。通过它,我们可以直接算出系统的焦距、主面位置、像面位置等关键参数。

下面这张 SVG 图,展示了一个由两个薄透镜组成的简单系统,以及如何构建它的系统矩阵:

双透镜系统矩阵构建流程 输入光线 [y₁, α₁]ᵀ 自由空间 d₁ M₁ = |1 d₁; 0 1| 薄透镜 f₁ M₂ = |1 0; -1/f₁ 1| 自由空间 d₂ M₃ = |1 d₂; 0 1| 薄透镜 f₂ M₄ = |1 0; -1/f₂ 1| 自由空间 d₃ M₅ = |1 d₃; 0 1| 输出光线 [y₂, α₂]ᵀ 系统矩阵 M_sys = M₅·M₄·M₃·M₂·M₁ [y₂, α₂]ᵀ = M_sys · [y₁, α₁]ᵀ

3.5 成像条件:系统矩阵的物理意义

有了系统矩阵,成像条件就变得非常直观。对于一个成像系统,我们希望从一个物点发出的所有光线,经过系统后都能会聚到同一个像点。

在近轴光学中,这个条件可以用系统矩阵的 B 元素来表示。当系统矩阵的 B = 0 时,系统处于成像状态。此时,系统矩阵变为:

M_sys = | A  0 |
        | C  D |

这个矩阵告诉我们:

  • A:横向放大率(像高与物高之比)
  • D:角放大率(像方孔径角与物方孔径角之比)
  • C:系统的光焦度(焦距的倒数)

成像条件总结:

  • B = 0:物像共轭,系统成清晰像
  • 横向放大率 m = A
  • 系统光焦度 Φ = -C
  • 有效焦距 f = 1/Φ = -1/C

我记得有一次,我在设计一个投影物镜时,用矩阵光学快速算出了系统的后工作距。当时软件仿真结果还没出来,我先用手算的结果去跟机械结构工程师沟通接口尺寸,等仿真结果出来后,发现误差不到 0.1mm。那一刻,我觉得矩阵光学真是太好用了。

我的建议: 在开始用 Zemax 或 Code V 做详细优化之前,先用矩阵光学把系统的近轴参数算一遍。这就像盖房子之前先画好草图,能帮你避免很多低级错误。特别是对于变焦系统,矩阵光学能让你快速理解各个镜组移动对系统焦距和像面位置的影响。

3.6 实战案例:一个简单的投影物镜

我们来看一个具体的例子。假设我们要设计一个投影物镜,它由两个薄透镜组成,参数如下:

  • 透镜1:焦距 f₁ = 100 mm
  • 透镜2:焦距 f₂ = 50 mm
  • 透镜间距:d = 80 mm
  • 物距:u = 200 mm(从透镜1到物面)

我们想求:系统的有效焦距、像距和横向放大率。

第一步:构建系统矩阵

光线从物面出发,经过自由空间 u,透镜1,自由空间 d,透镜2,最后到达像面。系统矩阵为:

M_sys = M_lens2 * M_space_d * M_lens1 * M_space_u

代入具体数值:

M_space_u = | 1  200 |
            | 0   1  |

M_lens1 = | 1      0 |
          | -0.01  1 |

M_space_d = | 1  80 |
            | 0   1 |

M_lens2 = | 1      0 |
          | -0.02  1 |

相乘后得到系统矩阵:

M_sys = | A  B |
        | C  D |

其中:
A = 1 - 0.02*80 - 0.01*200 + 0.01*0.02*200*80 = 1 - 1.6 - 2 + 3.2 = 0.6
B = 200 + 80 - 0.02*200*80 - 0.01*200*80 + 0.01*0.02*200*80*80 = ... 
(计算过程略,最终 B = 0 时对应像面位置)

第二步:求解像距 v

令 B = 0,解出像面到透镜2的距离 v。经过计算,v ≈ 133.3 mm。

第三步:计算系统参数

  • 有效焦距:f = -1/C = -1/(-0.02) = 50 mm
  • 横向放大率:m = A = 0.6
  • 像高 = 物高 × 0.6

避坑指南: 我曾经在计算多透镜系统时,把矩阵乘法的顺序搞反了,结果算出来的焦距符号是反的。记住,矩阵乘法不满足交换律,顺序一定不能错。另外,注意符号约定:光线角度以逆时针为正,距离以光线传播方向为正。