第一章 近轴光学基础:三大定律、近似条件与符号规则

各位同学好,我是老周。做光学设计这些年,我最大的体会是——近轴光学就像练武人的马步。你马步扎不稳,后面什么花哨招式都使不出来。今天咱们就把这马步扎扎实实地蹲下去。

1.1 几何光学三大定律

几何光学说白了,就是一套用光线来描述光传播的规则。它不关心光的波动性,只关心光线怎么走。这套规则的核心,就是三大定律。

三大定律速览

  • 直线传播定律:在均匀介质中,光沿直线传播
  • 反射定律:入射角等于反射角,且入射光线、反射光线、法线共面
  • 折射定律(斯涅尔定律):n₁ sin θ₁ = n₂ sin θ₂

我记得刚入行时,带我的老师傅跟我说:「小周,别小看这三条。你以后设计再复杂的镜头,追根溯源都是这三条在管着。」当时我不信,后来做了几个项目才明白——确实如此。

折射定律尤其关键。它告诉我们,光线从一种介质进入另一种介质时,方向会改变。改变多少?取决于两种介质的折射率比值。嗯,这里要注意:折射率是光在真空中的速度与在介质中速度的比值,它永远大于等于1。

介质 折射率(典型值) 备注
真空 1.0000 基准值
空气 1.0003 近似为1
水 1.333 常见冷却介质
BK7玻璃 1.5168 最常用的光学玻璃
SF11玻璃 1.7847 高折射率玻璃

1.2 近轴近似条件

你想想看,如果每次追迹光线都要算sinθ,那得多麻烦?而且很多光学系统里,光线跟光轴的夹角其实很小。这时候,我们就可以用近轴近似。

近轴近似的核心就一句话:当角度很小时,sin θ ≈ θ,tan θ ≈ θ,cos θ ≈ 1。这里的θ要用弧度制。

我的经验:实际工程中,当光线与光轴的夹角小于5°(约0.087弧度)时,近轴近似的误差可以控制在0.1%以内。我一般把这个作为经验阈值。超过这个范围,就得用精确的三角函数了。

为什么会这样?咱们看个具体数字:

  • θ = 5° = 0.08727 rad
  • sin(5°) = 0.08716
  • 误差 = (0.08727 - 0.08716) / 0.08716 ≈ 0.13%

这个误差在很多工程场景下完全可以接受。但如果你做的是高精度系统,比如光刻物镜,那就要小心了——我曾经在一个项目中因为用了近轴近似,结果像差计算差了半个波长,最后不得不全部重算。

避坑指南:近轴近似只适用于小角度。如果你发现光线在系统里越走越偏,角度越来越大,赶紧切回精确计算。我曾经吃过这个亏——一个广角镜头设计,用了近轴近似算了一整天,结果发现边缘视场的光线角度已经到30°了,全白算。

1.3 符号规则与坐标系建立

符号规则是近轴光学里最容易出错的地方。我见过太多新手(甚至老手)在这个问题上翻车。咱们得把规矩定清楚。

我个人习惯使用右手笛卡尔坐标系:

  • 光轴方向为z轴(光线传播方向为正)
  • 垂直光轴向上为y轴正方向
  • 垂直纸面向外为x轴正方向

然后,符号规则如下:

物理量 符号约定 举例
物距 s 实物为正,虚物为负 实物在透镜左侧,s > 0
像距 s' 实像为正,虚像为负 实像在透镜右侧,s' > 0
曲率半径 R 球心在右侧为正,左侧为负 凸面朝向左侧时R > 0
高度 y 光轴以上为正,以下为负 物体在光轴上方,y > 0
角度 u 从光轴转到光线,逆时针为正 光线向上倾斜,u > 0

这里我建议你记住一个口诀:「左负右正,上正下负」。简单粗暴,但管用。

关键提醒:符号规则必须统一。你可以在不同教材里看到不同的符号约定,这没关系。但一旦选定,整个系统里就不能换。我见过最惨的案例——一个同事用了两种符号规则混着算,结果像距符号搞反了,加工出来的镜头完全不能成像。

1.4 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个思维导图来看。

近轴光学基础 - 知识体系 近轴光学基础 几何光学三大定律 近轴近似条件 直线传播 反射定律 折射定律 sinθ ≈ θ tanθ ≈ θ cosθ ≈ 1 符号规则与坐标系 右手笛卡尔坐标系 物距/像距符号约定 曲率半径/高度/角度 近轴光线追迹与成像计算 三大定律 → 近似 → 符号规则

这张图把本章的三个核心模块串起来了。从左到右看:三大定律是基础,近轴近似是简化工具,符号规则是计算语言。三者结合,才能进行后续的近轴光线追迹。

1.5 实战:用Python验证近轴近似

光说不练假把式。咱们写几行代码,看看近轴近似到底有多准。

import numpy as np

# 角度从0到10度,步长0.5度
angles_deg = np.arange(0, 10.5, 0.5)
angles_rad = np.deg2rad(angles_deg)

# 精确值 vs 近似值
sin_exact = np.sin(angles_rad)
sin_approx = angles_rad

# 计算相对误差
error = np.abs((sin_exact - sin_approx) / sin_exact) * 100

# 打印结果
print("角度(°) | 精确sinθ | 近似θ | 误差(%)")
print("-" * 45)
for i in range(len(angles_deg)):
    print(f"{angles_deg[i]:6.1f} | {sin_exact[i]:8.5f} | {sin_approx[i]:8.5f} | {error[i]:6.3f}")

# 输出:
# 角度(°) | 精确sinθ | 近似θ | 误差(%)
# ---------------------------------------------
#    0.0 |  0.00000 |  0.00000 |  0.000
#    0.5 |  0.00873 |  0.00873 |  0.002
#    1.0 |  0.01745 |  0.01745 |  0.005
#    2.0 |  0.03490 |  0.03491 |  0.020
#    3.0 |  0.05234 |  0.05236 |  0.045
#    4.0 |  0.06976 |  0.06981 |  0.081
#    5.0 |  0.08716 |  0.08727 |  0.127
#    6.0 |  0.10453 |  0.10472 |  0.183
#    7.0 |  0.12187 |  0.12217 |  0.250
#    8.0 |  0.13917 |  0.13963 |  0.327
#    9.0 |  0.15643 |  0.15708 |  0.415
#   10.0 |  0.17365 |  0.17453 |  0.510

我的建议:把这段代码跑一遍,你就能直观感受到近轴近似的误差边界。我个人习惯在5°以内放心用,5°到10°之间要留个心眼,超过10°就老老实实用精确值。

好了,第一章的内容就到这儿。近轴光学的基础打牢了,后面讲光线追迹、像差分析、透镜设计,你才能跟得上。记住:符号规则别搞混,近似条件别滥用,三大定律别忘记。咱们下章见。