第2章 数学基础回顾:向量与坐标变换、微分几何基础、多项式拟合基础

做自由曲面设计,说白了就是跟数学打交道。我刚开始接触这个领域时,总觉得数学是门槛,后来才发现——数学其实是工具,用顺手了,曲面设计就没那么玄乎了。

这一章,我们快速过一遍后面会反复用到的数学基础。别担心,我不会堆公式,而是把重点放在“怎么用”上。

2.1 向量与坐标变换

自由曲面的描述,离不开向量。每个曲面上的点,都对应一个位置向量。而坐标变换,则是把曲面从一个位置搬到另一个位置,或者从一个坐标系转到另一个坐标系。

2.1.1 向量基础

一个三维向量 v = (x, y, z),表示从原点指向点 (x, y, z) 的方向和距离。常用的操作有:

  • 点积:a · b = |a||b|cosθ,用于计算夹角或投影长度。
  • 叉积:a × b,结果是一个垂直于 a 和 b 的向量,用于求法向量。
  • 模长:|v| = √(x² + y² + z²),表示向量的长度。
我的习惯:在代码里,我通常把向量写成列向量,这样矩阵乘法时不容易搞混顺序。比如在 MATLAB 或 Python 里,我习惯用 (3,1) 的形状表示向量。

2.1.2 坐标变换矩阵

坐标变换的核心是矩阵乘法。一个点 p 经过旋转和平移后,变成新点 p':

p' = R * p + t

其中 R 是 3×3 旋转矩阵,t 是 3×1 平移向量。为了统一表示,我们常用齐次坐标:

[ p' ]   = [ R  t ] * [ p ]
[ 1  ]     [ 0  1 ]   [ 1 ]

这样做的好处是,多次变换可以连乘成一个矩阵,计算效率高很多。

变换类型 矩阵形式 说明
平移 [[I, t], [0, 1]] 沿 x/y/z 方向移动
绕 x 轴旋转 [[1,0,0], [0,cosθ,-sinθ], [0,sinθ,cosθ]] 右手定则
绕 y 轴旋转 [[cosθ,0,sinθ], [0,1,0], [-sinθ,0,cosθ]] 注意符号方向
绕 z 轴旋转 [[cosθ,-sinθ,0], [sinθ,cosθ,0], [0,0,1]] 最常用
缩放 [[sx,0,0], [0,sy,0], [0,0,sz]] 各向同性或异性
我曾经踩过的坑:旋转矩阵的顺序很重要!先绕 x 轴转再绕 y 轴转,和反过来,结果完全不同。我建议在项目开始前就定好变换顺序,比如 ZYX 顺序,然后全程统一。

2.2 微分几何基础

自由曲面的“形状”,本质上是由它的法向量和曲率决定的。这两个量,直接关系到光线在曲面上的反射和折射行为。

2.2.1 法向量

曲面上某点的法向量,就是垂直于该点切平面的向量。对于显式曲面 z = f(x, y),法向量可以这样算:

n = (-∂f/∂x, -∂f/∂y, 1)  (未归一化)

归一化后,n 就是单位法向量。在光学设计中,法向量的方向决定了光线的偏折方向,所以必须算准。

关键点:法向量的方向约定很重要。我一般约定法向量指向光线入射的一侧,这样在计算反射和折射时,符号不会搞错。

2.2.2 曲率

曲率描述曲面在某点“弯曲”的程度。对于自由曲面,我们关心两个主曲率 κ₁ 和 κ₂,以及平均曲率 H 和高斯曲率 K:

  • 平均曲率:H = (κ₁ + κ₂) / 2
  • 高斯曲率:K = κ₁ × κ₂

这两个量能告诉我们曲面的局部形状:

K > 0 K = 0 K < 0
椭球点(碗状) 抛物点(柱面或平面) 双曲点(马鞍形)

在自由曲面设计中,我经常用曲率分布来判断曲面是否“光滑”。如果曲率突变,说明曲面有褶皱,加工出来会有问题。

2.3 多项式拟合基础

自由曲面通常用多项式来表示。为什么?因为多项式简单、好算、容易求导。最常见的两种是:

2.3.1 泽尼克多项式

泽尼克多项式在圆形孔径上正交,非常适合描述光学像差。它的形式是:

Z(ρ, θ) = Σ A_nm * R_n(ρ) * cos(mθ) + B_nm * R_n(ρ) * sin(mθ)

其中 ρ 是归一化半径,θ 是角度。前几项对应常见的像差:

项 名称 物理意义
Z₁ 平移 整体偏移
Z₂, Z₃ 倾斜 像面倾斜
Z₄ 离焦 焦点偏移
Z₅, Z₆ 像散 非对称模糊
Z₇, Z₈ 彗差 拖尾状像差
Z₉ 球差 对称模糊
我的建议:刚开始做自由曲面时,别用太多项。我一般先用前 9 项(到球差),看看效果,再逐步增加。项数太多容易过拟合,而且加工时曲面会变得很复杂。

2.3.2 多项式拟合的注意事项

拟合时,我们通常用最小二乘法。但有几个坑要注意:

  • 数据点分布:采样点要均匀覆盖整个曲面,否则拟合结果会偏向采样密集的区域。
  • 多项式阶数:阶数太低,拟合精度不够;阶数太高,容易过拟合。我一般用交叉验证来选阶数。
  • 数值稳定性:高阶多项式在边界处容易震荡(龙格现象)。如果发现拟合曲面在边缘处“翘起来”,说明阶数太高了。
我曾经遇到的情况:有一次拟合一个非球面,用了 20 阶多项式,结果曲面在边缘处剧烈震荡,加工出来的镜片边缘全是波纹。后来降到 12 阶,问题就解决了。所以,别贪高阶。

2.4 本章知识体系

下面这张图,把本章的核心内容串起来了。你可以把它当作一个快速索引,后面用到哪个知识点,回来翻一翻就行。

第2章 数学基础回顾 · 知识体系 向量与坐标变换 微分几何基础 多项式拟合基础 点积 / 叉积 / 模长 旋转 / 平移 / 齐次坐标 法向量计算 主曲率 / 平均曲率 / 高斯曲率 泽尼克多项式 最小二乘法 / 过拟合 这些数学工具,是自由曲面建模的“语言” 掌握它们,后续的曲面设计才能得心应手

嗯,这一章的内容就到这里。数学基础是枯燥了点,但后面讲自由曲面建模时,你会发现这些知识全都能用上。尤其是法向量和曲率,几乎每个曲面分析都离不开它们。