3. 数学基础(二):局部坐标系与全局坐标系、曲面法向量与曲率计算、微分几何基础
数学这东西,说实话,很多做光学设计的同行一开始都头疼。我当年刚接触自由曲面时,看到那些公式也发怵。但后来发现,搞懂几个核心概念,你就能看懂大部分文献了。这一章,咱们就聊聊坐标系、法向量和曲率这些绕不开的基础。
3.1 全局坐标系与局部坐标系
做自由曲面设计,你脑子里得同时装着两套坐标系。一套是全局的,一套是局部的。全局坐标系就是整个系统的参考系,比如Z轴沿着光轴方向。局部坐标系呢?它贴在曲面上,跟着曲面走。
核心区别:
- 全局坐标系 (Global):固定不动,描述整个光学系统的空间位置。
- 局部坐标系 (Local):随曲面上的点变化,描述该点附近的曲面特性。
我个人习惯,在写代码时,先把全局坐标算好,再通过旋转平移变换到局部坐标。为什么要这么麻烦?你想想看,曲率、法向量这些量,在局部坐标系下表达才最简洁。
小技巧: 在 Zemax 或 Code V 里,局部坐标通常用表面参数 (u, v) 表示。我建议你一开始就养成习惯,把 (x, y, z) 和 (u, v) 的转换关系写清楚,后面追迹光线会省很多事。
3.2 曲面法向量计算
法向量,说白了就是曲面在某点的垂线方向。光线入射、反射、折射,都离不开它。计算法向量,最直接的方法就是求偏导。
假设曲面方程是 z = f(x, y),那么法向量可以写成:
N = ( -∂f/∂x, -∂f/∂y, 1 )
然后归一化,得到单位法向量。嗯,这里要注意,符号方向决定了光线是在曲面哪一侧。我在项目中遇到过因为法向量方向搞反,导致反射光线跑到曲面背后去的尴尬情况。
避坑指南: 我曾经在计算非球面法向量时,直接用了数值差分,结果在边缘区域误差很大。后来改用解析求导,精度一下子就上去了。能用解析就别用数值,这是经验。
3.3 曲率计算:主曲率与平均曲率
曲率描述曲面弯曲的程度。对于自由曲面,我们关心两个主曲率 κ₁ 和 κ₂。它们分别对应曲面上某点弯曲最大和最小的方向。
计算主曲率,需要先求出曲面的第一基本形式 (I) 和第二基本形式 (II)。
| 基本形式 | 表达式 | 物理意义 |
|---|---|---|
| 第一基本形式 I | E du² + 2F du dv + G dv² | 描述曲面上的弧长、角度、面积 |
| 第二基本形式 II | L du² + 2M du dv + N dv² | 描述曲面在法向的弯曲程度 |
有了 E, F, G 和 L, M, N,主曲率就是下面这个方程的解:
(EG - F²) κ² - (EN + GL - 2FM) κ + (LN - M²) = 0
解出来的两个根,就是 κ₁ 和 κ₂。平均曲率 H = (κ₁ + κ₂)/2,高斯曲率 K = κ₁·κ₂。
为什么重要? 在自由曲面优化中,我经常用高斯曲率 K 来判断曲面是否可展。如果 K=0,说明曲面可以展开成平面,这对加工来说是个好消息。
3.4 微分几何基础:第一/第二基本形式
这两个基本形式,是微分几何里最核心的工具。它们把曲面的局部几何性质,用一组系数打包起来。
第一基本形式,说白了就是曲面上的“尺子”。它告诉你,在曲面上走一小步,实际距离是多少。系数 E, F, G 由曲面对参数 (u, v) 的偏导计算:
E = r_u · r_u
F = r_u · r_v
G = r_v · r_v
其中 r(u, v) 是曲面的位置向量。
第二基本形式,描述的是曲面在法向的“弯曲”。系数 L, M, N 由曲面的二阶偏导和法向量点乘得到:
L = r_uu · n
M = r_uv · n
N = r_vv · n
这里 n 是单位法向量。
我的经验: 刚开始学的时候,别被这些符号吓住。你只需要记住:第一基本形式管“度量”,第二基本形式管“弯曲”。在写自由曲面优化程序时,我通常会把 E, F, G, L, M, N 封装成一个结构体,方便调用。
3.5 知识体系结构图
下面这张图,把本章的核心概念串起来了。你可以把它当作一个思维导图,方便复习。
3.6 实战:计算一个简单曲面的曲率
光说不练假把式。咱们拿一个最简单的球面来练手。球面方程:z = sqrt(R² - x² - y²),R 是半径。
第一步,写出参数表示:r(u, v) = (u, v, sqrt(R² - u² - v²))。
第二步,计算偏导 r_u, r_v, r_uu, r_uv, r_vv。
第三步,代入公式求 E, F, G, L, M, N。
你会发现,对于球面,E = G = 1 + (u² + v²)/(R² - u² - v²),F = 0。L = N = 1/R,M = 0。最后算出来的主曲率 κ₁ = κ₂ = 1/R。嗯,球面嘛,各方向弯曲一样,结果很漂亮。
验证方法: 我每次写完曲率计算代码,都会先用球面做测试。如果算出来不是 1/R,那代码肯定有 bug。这个习惯帮我省了不少调试时间。
这一章的内容,是自由曲面设计的数学基石。坐标系、法向量、曲率、基本形式,这些概念会贯穿整个课程。搞懂了它们,后面看自由曲面的优化算法、追迹方法,就会轻松很多。