数学基础回顾:参数曲线与曲面
说实话,做自由曲面优化,数学基础是绕不开的坎。我见过不少同学一上来就调参数,结果曲面不光顺、连续性不对,折腾半天才发现是底层曲线没选对。这一章,咱们就把参数曲线与曲面的几个核心概念捋清楚。
2.1 参数曲线:从 Bezier 到 NURBS
先说说 Bezier 曲线。它的核心思想很简单:用一组控制点来定义曲线形状。你拖动控制点,曲线跟着变。我最早接触它是在做汽车 A 级曲面时,那时候觉得这东西真直观。
Bezier 曲线的数学形式:
C(t) = Σᵢ₌₀ⁿ Bᵢₙ(t) · Pᵢ, t ∈ [0,1]
其中 Bᵢₙ(t) 是 Bernstein 基函数。n 是次数,Pᵢ 是控制点。
Bezier 有个明显的缺点:移动一个控制点,整条曲线都会变。这在局部调整时很麻烦。后来有了 B 样条,它引入了“节点向量”的概念,让曲线有了局部支撑性。
| 曲线类型 | 局部控制 | 连续性 | 适用场景 |
|---|---|---|---|
| Bezier | 全局 | Cⁿ(内部) | 简单形状、字体设计 |
| B 样条 | 局部 | Cᵏ⁻¹(k 阶) | 复杂曲线、工业造型 |
| NURBS | 局部 + 权重 | Cᵏ⁻¹ | 精确圆锥曲线、汽车车身 |
NURBS 是 B 样条的升级版。它给每个控制点加了一个权重 wᵢ,能精确表示圆、椭圆这些圆锥曲线。我在做车身曲面时,NURBS 几乎是标配。
我的经验: 选曲线类型时,先问自己两个问题:需不需要局部调整?需不需要精确表示圆锥曲线?如果两个都是“是”,直接上 NURBS。
2.2 曲面连续性:G0、G1、G2
曲面拼接时,连续性是个关键指标。说白了,就是两块曲面在边界上“接得有多顺”。
- G0(位置连续): 两块曲面在边界上重合。但方向可能突变,看起来有折痕。
- G1(切向连续): 边界处的切平面方向一致。看起来光滑了,但高光反射可能有“断带”。
- G2(曲率连续): 边界处的曲率也一致。高光反射连续,视觉上最顺眼。
我记得有一次做汽车尾灯曲面,供应商给的模型只保证了 G1。结果在光照下,高光带明显断了一截。后来我强制要求 G2,问题才解决。
避坑指南: 我曾经在消费电子产品上用了 G1 连续,结果模具抛光后,分模线处出现肉眼可见的“台阶”。后来才明白,G1 在数学上光滑,但实际加工时,曲率突变会导致刀具路径抖动。所以,能上 G2 就别省。
2.3 法向量与曲率计算
法向量和曲率是曲面分析的“眼睛”。法向量决定了光照反射的方向,曲率则告诉你曲面“弯得有多厉害”。
对于参数曲面 S(u,v),法向量 N 的计算公式是:
N = (∂S/∂u) × (∂S/∂v) / ||(∂S/∂u) × (∂S/∂v)||
曲率稍微复杂一点。我们通常用高斯曲率 K 和平均曲率 H 来评估曲面质量:
- 高斯曲率 K > 0: 曲面局部像球面(凸或凹)。
- 高斯曲率 K = 0: 曲面局部像圆柱面(可展开)。
- 高斯曲率 K < 0: 曲面局部像马鞍面(双曲点)。
你想想看,如果一块自由曲面上同时出现正曲率和负曲率区域,那高光反射就会扭曲。这在汽车外饰件上是绝对不允许的。
实用技巧: 调试时,我习惯用曲率梳(Curvature Comb)来检查曲线。如果曲率梳的线条突然抖动或断裂,那大概率是连续性出了问题。
2.4 知识体系总览
下面这张图把本章的核心概念串起来了。你可以把它当作一个快速索引。
2.5 本章小结
这一章的内容,说白了就是三件事:
- 选对曲线类型: Bezier 适合简单形状,B 样条适合局部控制,NURBS 是工业级选择。
- 保证连续性: G0 是底线,G1 是基本要求,G2 是品质追求。
- 用好曲率分析: 曲率梳和高斯曲率图是调试时的“照妖镜”。
嗯,这些概念后面会反复用到。尤其是调参数时,你一定会回来翻这一章。