数学基础(一):参数曲面表示方法

说实话,刚接触自由曲面设计的人,最容易卡住的地方不是光学理论,而是数学表达。你想想看,一个自由曲面,它不像球面那样可以用一个简单的半径来描述。那怎么把它“告诉”给计算机呢?

答案就是参数曲面。说白了,就是用数学公式把曲面上的每一个点都算出来。我最早做投影镜头时,就被这个参数化搞晕过。后来发现,只要搞懂三种核心方法——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曲线/曲面 全局控制 改一点动全局 适合简单曲面 局部控制 改一点只影响局部 适合复杂曲面 精确+局部控制 可表示圆锥曲线 工业标准 核心概念:控制点 · 节点向量 · 阶次 · 连续性

实际应用中的选择

做自由曲面光学设计,我建议你这样选:

  1. 简单反射镜或透镜:用Bezier就够了,控制点少,调试快
  2. 复杂照明系统:用B样条,局部控制能力强,容易优化
  3. 高精度成像系统:用NURBS,能精确描述非球面,成像质量有保障

注意:NURBS虽然功能强,但参数多,优化时容易过拟合。我见过有人用20个控制点去拟合一个简单的抛物面,结果曲面出现波浪。控制点数量要适中,一般5-8个就够了。

好了,这一章的内容就是这些。参数曲面是自由曲面设计的数学基础,搞懂了Bezier、B样条和NURBS的区别,后面学曲面拟合和优化就轻松多了。记住:控制点决定形状,节点向量决定分段,阶次决定光滑度。这三个概念,贯穿整个自由曲面设计。