3. 参数化表示:显式、隐式与参数化曲面表示法对比

说到曲面表示,我刚开始做光学设计那会儿,其实也绕了不少弯路。那时候拿到一个自由曲面,脑子里第一反应就是:这东西到底该怎么描述?

后来慢慢摸清楚了,曲面表示法其实就三大类:显式、隐式、参数化。每种都有它的脾气,选对了事半功倍,选错了……嗯,调试到怀疑人生。

3.1 显式曲面表示:最直观,但有限制

显式表示,说白了就是 z = f(x, y) 这种形式。你给一个 (x, y),直接算出 z 值。简单粗暴。

典型形式:

z = f(x, y) = Ax² + By² + Cxy + Dx + Ey + F

这就是我们第一章讲的 XY 多项式的基础形态。

优点很明显:

  • 计算效率高,直接代入就行
  • 容易理解,初中数学就能看懂
  • 适合做光线追迹,因为 z 是显式给出的

但缺点也很致命:

  • 只能表示单值曲面——一个 (x, y) 只能对应一个 z
  • 无法表示封闭曲面,比如球体、环面
  • 曲面有垂直切面时直接崩掉

我的经验: 在光学设计中,显式表示最适合描述反射镜或透镜的表面,尤其是那些没有回折的连续曲面。但如果你要做非球面或者自由曲面优化,显式表示往往不够灵活。

3.2 隐式曲面表示:更强大,但计算麻烦

隐式表示是 F(x, y, z) = 0 这种形式。你想想看,一个球体用显式表示得拆成上下两半,但用隐式表示就一句话:

x² + y² + z² - R² = 0

是不是清爽多了?

隐式的优势:

  • 可以表示封闭曲面、多值曲面
  • 判断点是否在曲面上很方便——代入 F 看是否等于 0
  • 求法向量直接用梯度 ∇F,非常优雅

但坑也不少:

  • 给定 (x, y) 求 z 需要解方程,计算量大
  • 光线追迹时,需要数值求解交点,效率低
  • 参数调整不直观,你改一个系数,曲面形状变化很难预测

我曾经踩过的坑: 有一次做自由曲面优化,用了隐式表示,结果光线追迹时每根光线都要解非线性方程,一个镜面几万根光线,算了一整夜还没收敛。后来换成参数化表示,半天就搞定了。

3.3 参数化曲面表示:自由曲面的王牌

参数化表示,就是引入两个参数 (u, v),把曲面上的点表示为:

S(u, v) = (x(u, v), y(u, v), z(u, v))

说白了,就是用两个参数控制三维空间中的点。你想想看,这就像在曲面上铺了一张网,每个网格点对应一组 (u, v)。

为什么参数化表示是自由曲面的主流?

  • 可以表示任意形状,包括封闭曲面
  • 求导、求法向量都很方便
  • 适合做曲面拼接和连续性控制
  • 光线追迹时,可以用数值方法快速求交

常见参数化曲面:

  • Bezier 曲面: 控制点驱动,直观但全局影响
  • B-spline 曲面: 局部控制,更灵活
  • NURBS 曲面: 工业标准,能精确表示圆锥曲线
  • XY 多项式参数化: 用 (u, v) 映射到 (x, y),再用多项式算 z

3.4 三种表示法的对比

我习惯把这三者的区别用一张表说清楚:

特性 显式表示 隐式表示 参数化表示
形式 z = f(x, y) F(x, y, z) = 0 S(u, v) = (x, y, z)
单值性 必须单值 可多值 可多值
求值效率 极高 低(需解方程) 高
法向量计算 解析求导 梯度 ∇F 偏导叉积
封闭曲面 不支持 支持 支持
局部控制 差 差 好(B-spline等)
光学设计常用度 中等 低 高

3.5 核心逻辑:三种表示法的关系

下面这张图是我自己总结的,帮你理清三者的关系和适用场景:

曲面表示法核心逻辑 显式表示 z = f(x, y) 隐式表示 F(x, y, z) = 0 参数化表示 S(u, v) = (x, y, z) 单值→多值 灵活度↑ 关键特性对比 计算效率 高 曲面表达能力 中 优化灵活性 高 光学设计适用性 最佳 结论:自由曲面设计首选参数化表示 兼顾效率、灵活性与表达能力

3.6 实际选型建议

我个人习惯这样选:

  1. 简单球面或平面: 显式表示就够了,别折腾
  2. 封闭曲面或复杂拓扑: 隐式表示,比如做透镜组的外包络面
  3. 自由曲面优化: 无脑选参数化表示,尤其是 NURBS 或 XY 多项式参数化

避坑指南: 我曾经在做一个离轴反射系统时,用了隐式表示来优化自由曲面。结果每次迭代都要解方程,速度慢不说,还经常不收敛。后来换成参数化表示,用 (u, v) 映射到物理坐标,再用多项式描述面形,优化效率直接提升了 10 倍。

3.7 小结

三种表示法各有各的舞台。显式简单直接,隐式强大但计算重,参数化则是自由曲面设计的王者。你想想看,我们后面要讲的 XY 多项式自由曲面,本质上就是参数化表示的一种特例——用 (u, v) 映射到 (x, y),再用多项式算 z。

理解了这三种表示法的区别,你就掌握了自由曲面数学建模的第一把钥匙。