数学基础(一):参数曲面表示方法
说实话,刚接触自由曲面设计的人,最容易卡住的地方不是光学理论,而是数学表达。你想想看,一个自由曲面,它不像球面那样可以用一个简单的半径来描述。那怎么把它“告诉”给计算机呢?
答案就是参数曲面。说白了,就是用数学公式把曲面上的每一个点都算出来。我最早做投影镜头时,就被这个参数化搞晕过。后来发现,只要搞懂三种核心方法——NURBS、Bezier、B样条,后面就顺了。
从Bezier曲线说起
Bezier曲线是最直观的入门方式。它用一组控制点来定义曲线形状。曲线本身不穿过所有控制点,但会被这些点“拉”向某个方向。
核心公式(一次一个点):
C(t) = Σᵢ₌₀ⁿ Bᵢₙ(t) · Pᵢ
其中 Bᵢₙ(t) 是伯恩斯坦基函数,Pᵢ 是控制点,t 在 0 到 1 之间变化。
我习惯把控制点想象成“磁铁”。曲线就像一根软铁丝,被这些磁铁吸引。移动一个控制点,整条曲线都会受影响。嗯,这就是Bezier的全局性——改一个点,全盘动。
我的经验:做自由曲面时,Bezier适合做局部小范围调整。但如果你要设计一个复杂的反射镜面,Bezier的控制力就不太够了。因为改一个点,整个面都变,调试起来很痛苦。
B样条:局部控制的救星
B样条解决了Bezier的全局性问题。它把曲线分成多段,每段只受附近几个控制点影响。你想想看,这在实际设计中多有用——我只想调镜面边缘,中间不动,B样条就能做到。
B样条引入了两个关键概念:节点向量和阶次。
| 概念 | 说明 | 我的理解 |
|---|---|---|
| 节点向量 | 一组递增的参数值,把曲线分成若干段 | 就像尺子上的刻度,告诉曲线在哪里分段 |
| 阶次 | 决定曲线光滑程度的参数,阶次越高越光滑 | 阶次=3时,曲线曲率连续,做光学面够用了 |
| 控制点 | 定义曲线形状的顶点 | 移动一个控制点,只影响附近几段 |
避坑指南:我曾经在做一个离轴三反系统时,把B样条的阶次设到了5。结果曲面确实很光滑,但计算量暴增,优化一次要等半小时。后来我改成阶次3,效果差不多,速度快了5倍。阶次不是越高越好,够用就行。
NURBS:工业界的标准
NURBS(非均匀有理B样条)是B样条的升级版。它多了一个权重参数,可以精确表示圆锥曲线和球面。你想想看,光学设计里球面、抛物面太常见了,NURBS能完美描述它们,这就是它成为工业标准的原因。
NURBS的完整公式长这样:
R(t) = Σᵢ₌₀ⁿ Nᵢₚ(t) · wᵢ · Pᵢ / Σᵢ₌₀ⁿ Nᵢₚ(t) · wᵢ
其中 wᵢ 就是权重。权重越大,曲线越靠近那个控制点。这个特性在做非球面时特别有用。
三种方法的对比:
- Bezier:简单直观,全局控制,适合入门和小范围调整
- B样条:局部控制,效率高,适合复杂曲面设计
- NURBS:功能最强,能精确表示圆锥曲线,工业标准
曲面阶次与连续性
做光学设计,曲面光滑度直接决定成像质量。这里有两个关键指标:
- C⁰连续:位置连续,曲面没有断裂
- C¹连续:切线方向连续,曲面没有尖角
- C²连续:曲率连续,曲面光滑到肉眼看不出来
光学反射镜至少需要C¹连续,否则光线会在接缝处发生散射。我做过一个自由曲面照明系统,一开始只保证了C⁰,结果模拟出来的光斑有亮条纹。后来改成C¹,问题就解决了。
小技巧:阶次和连续性是挂钩的。阶次为3的B样条,内部自然达到C²连续。但如果你在节点处重复节点,连续性会降低。我习惯在曲面边界处重复节点,保证边界位置准确,内部保持高连续性。
知识结构图
下面这张图帮你理清本章的核心逻辑:
实际应用中的选择
做自由曲面光学设计,我建议你这样选:
- 简单反射镜或透镜:用Bezier就够了,控制点少,调试快
- 复杂照明系统:用B样条,局部控制能力强,容易优化
- 高精度成像系统:用NURBS,能精确描述非球面,成像质量有保障
注意:NURBS虽然功能强,但参数多,优化时容易过拟合。我见过有人用20个控制点去拟合一个简单的抛物面,结果曲面出现波浪。控制点数量要适中,一般5-8个就够了。
好了,这一章的内容就是这些。参数曲面是自由曲面设计的数学基础,搞懂了Bezier、B样条和NURBS的区别,后面学曲面拟合和优化就轻松多了。记住:控制点决定形状,节点向量决定分段,阶次决定光滑度。这三个概念,贯穿整个自由曲面设计。