几何建模与处理之五 Bezier曲线与B样条曲线
几何建模与处理之五 Bezier曲线与B样条曲线
Bezier曲线
建模的两种形式:
- 重建(Reconstruction)
- 逆向工程:形状已有,要将其“猜”出来
- 采样->拟合:需要函数空间足够丰富(表达能力够)
- 代数观点:{a,b,c}作为基函数的组合权系数
- 设计(Design)
- 自由设计:凭空产生,或从一个简单的形状编辑得到
- 交互式编辑:几何直观性要好
- 几何观点:基函数{t2,t,1}作为控制点的组合权系数
二次多项式曲线(抛物线):
使用幂基表示曲线
使用Bernstein基函数表达
系数顶点与曲线关联性强,具有很好的几何意义,对于交互式曲线设计更直观.
Bernstein基函数
n次Bernstein基函数:B=(B(n)0,B(n)1,...,B(n)n)
性质:
-
对称性:Bni(t)=Bnn−1(1−t)
-
B(n)i在t=in达到最大值
用Bernstein基函数所表达的曲线具有非常好的几何意义
Bezier曲线
n次Berzier曲线:n+1个控制点

Berzier曲线的性质来源于Bernstein基函数的性质。
Bernstein基函数与Bezier曲线的性质
-
正权性:正性+权性
- B(n)i(t)≥0,t∈[0,1]
- ∑ni=1B(n)i(t)=1,t∈[0,1]
-
基性:B是次数不高于n的多项式集合(空间)的一组基
-
递推公式:
- 基函数的递推公式:B(n)i(t)=(1−t)B(n−1)i(t)+tB(n−1)i−1(t)B00(t)=1,B(n)i(t)=0fori∉0...n
- 高阶的基函数由两个低阶的基函数“升阶”得到,利于保持一些良好的性质
-
端点插值性:Bezier曲线经过首位两个控制顶点
-
导数:
- f′(t)=n∑n−1i=0Bn−1i(t)(pi+1−pi)
- f[r](t)=n!(n−r)!∑n−ri=0Bn−ri(t)·Δrpi
Bezier曲线的端点性质
- 端点插值:
- 端点的切线方向与边相同
- 端点的2阶(k)切线与3点(k+1)相关
-
升阶:(1−t)Bni(t)=(1−in+1)Bn+1i(t) => tBni(t)=i+1n+1Bn+1i(t)
Bezier曲线升阶:$$f(t)=\sum_{i=0}{n+1}B_i(t)[\frac {n+1-i}{n+1}P_i+\frac{i}{n+1}P_{i-1}]$$
De casteljau algorithm
根据基函数的递推公式:B(n)i(t)=(1−t)B(n−1)i(t)+tB(n−1)i−1(t)
给定一个t,就能求出x(t):b(r)i=(1−n)br−1i+tb(r−1)i+1

几何样条曲线
两Bezier曲线的拼接条件:
C0:
G1:三点共线
C1:三点共线且等长
C2:d2/dt2为(p2−2p1+p0),(pn−2pn−1+pn−2),阴影三角形相似
构造3次插值Bezier曲线的几何方法
工程中,在点pi(0<i<n)处,作pi-1和pi+1连线的平行线,取1/6的位置作为控制点。一段曲线由四个点约束。
B样条
Bezier曲线(Bernstein基函数)存在全局性,不利于设计。
B样条曲线:分段Bezier曲线,具有局部性。
样条曲线的统一表达
基函数
均匀结点(Uniform)
非均匀结点(t0<t1<....<tn<...tn+k)



性质:
- Ni,k(t)>0 for ti<t<ti+k(局部性)
- ∑ni=0Ni,k(t)=1 for tk−1≤t≤tn+1 (权性)
- Ni,k(t)在tj处是Ck-2
B-spline curve
给定n+1个控制点,d0,...dn∈R3,T=(t0,...tn+k)称为向量节点。
每多出一个重结点(Multiple knots),曲线的光滑性降一阶。
例如,k=4,n=5的B-spline curve
k重时(0,...,0,1,...,1)为Bernstein基。