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 核心逻辑:三种表示法的关系
下面这张图是我自己总结的,帮你理清三者的关系和适用场景:
3.6 实际选型建议
我个人习惯这样选:
- 简单球面或平面: 显式表示就够了,别折腾
- 封闭曲面或复杂拓扑: 隐式表示,比如做透镜组的外包络面
- 自由曲面优化: 无脑选参数化表示,尤其是 NURBS 或 XY 多项式参数化
避坑指南: 我曾经在做一个离轴反射系统时,用了隐式表示来优化自由曲面。结果每次迭代都要解方程,速度慢不说,还经常不收敛。后来换成参数化表示,用 (u, v) 映射到物理坐标,再用多项式描述面形,优化效率直接提升了 10 倍。
3.7 小结
三种表示法各有各的舞台。显式简单直接,隐式强大但计算重,参数化则是自由曲面设计的王者。你想想看,我们后面要讲的 XY 多项式自由曲面,本质上就是参数化表示的一种特例——用 (u, v) 映射到 (x, y),再用多项式算 z。
理解了这三种表示法的区别,你就掌握了自由曲面数学建模的第一把钥匙。