第一章 近轴光学基础:三大定律、近似条件与符号规则
各位同学好,我是老周。做光学设计这些年,我最大的体会是——近轴光学就像练武人的马步。你马步扎不稳,后面什么花哨招式都使不出来。今天咱们就把这马步扎扎实实地蹲下去。
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 知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作一个思维导图来看。
这张图把本章的三个核心模块串起来了。从左到右看:三大定律是基础,近轴近似是简化工具,符号规则是计算语言。三者结合,才能进行后续的近轴光线追迹。
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°就老老实实用精确值。
好了,第一章的内容就到这儿。近轴光学的基础打牢了,后面讲光线追迹、像差分析、透镜设计,你才能跟得上。记住:符号规则别搞混,近似条件别滥用,三大定律别忘记。咱们下章见。