曲线用于字体、动画轨迹和造型轮廓,曲面用于汽车、船体和自由形状建模。课件的主线是:先学会用参数在两个点间移动,再把“点和导数约束”变成一条光滑曲线。
1. 三种描述方式
二维曲线可以是显式形式 y=f(x)、隐式形式 g(x,y)=0,也可以写成参数形式
p(t)=(x(t),y(t),z(t)).
参数形式不要求每个 x 只有一个 y,能自然描述闭环、空间曲线和运动轨迹,因此是这讲的重点。同一条空间曲线可有不同参数化;参数还决定物体沿曲线运动的速度。
2. 从线性插值到三次 Hermite
两点间线性插值为
p(t)=(1−t)p0+tp1,0≤t≤1.
分段常量会在值上跳变,分段线性虽然位置连续,导数却在折点跳变。若希望同时控制端点位置与端点切线,最低需要四个系数,因此选择三次多项式。
三次 Hermite 曲线由 p0,p1 和两端切向量 m0,m1 决定:
p(t)=h00(t)p0+h10(t)m0+h01(t)p1+h11(t)m1,
其中
h00h10h01h11=2t3−3t2+1,=t3−2t2+t,=−2t3+3t2,=t3−t2.
3t2−2t3 这类 ease function 在端点速度为零,常用于动画柔和起停。
3. Catmull–Rom:只给点也能估切线
Hermite 需要手动给切向量。Catmull–Rom 用相邻控制点估计中间段端点切线,例如均匀参数化下
mi=21(pi+1−pi−1).
这样生成的曲线插值所有控制点,并通常达到 C1 连续。代价是某一段还依赖左右邻点,控制点分布很不均匀时可能过冲;实际系统可改用弦长或向心参数化。
4. Bezier 曲线
三次 Hermite 的切线也可改写成两个额外控制点:
m0=3(P1−P0),m1=3(P3−P2).
得到三次 Bezier:
B(t)=(1−t)3P0+3(1−t)2tP1+3(1−t)t2P2+t3P3.
一般 n 次形式为
B(t)=i=0∑n(in)(1−t)n−itiPi.
这些 Bernstein 基函数非负且和为 1,因此曲线位于控制点凸包内。
5. de Casteljau 算法
de Casteljau 不直接展开多项式,而是反复做线性插值:
Pi(r)=(1−t)Pi(r−1)+tPi+1(r−1).
直到只剩一个点 P0(n)=B(t)。它几何直观、数值稳定,还能在任意 t 处把一条 Bezier 精确拆成两段。

Bezier 曲线的常用性质:
- 插值首尾控制点。
- 首尾切线分别沿 P1−P0 与 Pn−Pn−1。
- 位于控制点凸包内。
- 仿射不变:先变换控制点再求曲线,等于先求曲线再做仿射变换。
高次曲线控制会变得全局而不稳定,工程中更常拼接多段低次、尤其是三次 Bezier。
6. 拼接连续性
两段曲线端点相同是 C0 连续,位置不会断开。若一阶导数也相同,则为 C1,速度方向和大小都连续。对相邻三次 Bezier,若
P3=Q0,P3−P2=Q1−Q0,
就满足参数意义下的一阶连续。若只要求两边切线共线、允许速度大小不同,则是几何连续 G1。
7. 从曲线到参数曲面
参数曲面由两个参数给出:
S(u,v)=(x(u,v),y(u,v),z(u,v)).
两个切方向是 ∂S/∂u 与 ∂S/∂v,法线为
n=∥Su×Sv∥Su×Sv.
双三次 Bezier patch 使用 4×4 控制点网格:
S(u,v)=i=0∑3j=0∑3Bi3(u)Bj3(v)Pij.
可以先固定 v,沿 u 做四条 de Casteljau,再沿 v 合成;也可以直接用矩阵形式计算。曲面只插值四个角控制点,其余控制点塑造边界切线和内部弯曲。
复杂模型由多个 patch 拼接。C0 要求边界控制点重合,C1 还要求边界两侧控制点差给出一致的一阶导数。Utah Teapot 正是多个双三次 Bezier patch 组成的经典例子。