仅由一段多项式或有理多项式曲线段组成的曲线往往还不能满足实际应用的要求,它们如下缺点:
以上问题可以通过采用由分段多项式或分段有理多项式表示的曲线(曲面)来解决。假设曲线 C ( u ) C(u) C(u)由 m ( = 3 ) m(=3) m(=3)段 n n n次多项式组成,其定义域为 u ∈ [ 0 , 1 ] u\in[0,1] u∈[0,1]。参数 u 0 = 0 < u 1 < u 2 < u 3 = 1 u_0=0
可以用任何一种多项式曲线的表示形式来表示 C i ( u ) C_i(u) Ci(u)。假设次数为3,每段4个控制点,一共12个控制点, P i j P_i^j Pij表示第 j j j段多项式曲线的第 i i i个控制点。断点集合为 U = { u 0 , u 1 , u 2 , u 3 } U=\{u_0,u_1,u_2,u_3\} U={u0,u1,u2,u3}均保持不变,令12个控制点 P i j P_i^j Pij任意变化,则得到一个由 U U U上的所有分段三次多项式曲线组成的向量空间 V V V。 V V V的维数是12, V V V中的曲线在 u 1 u_1 u1或 u 2 u_2 u2处可能不连续。现在规定 P 3 1 = P 0 2 P_3^1=P_0^2 P31=P02, P 3 2 = P 0 3 P_3^2=P_0^3 P32=P03,则得到定义在 U U U上并且处处至少 C 0 C^0 C0连续的分段三次多项式曲线组成的向量空间 V 0 V_0 V0。 V 0 V_0 V0的维数是10,并且 V 0 ⊂ V \mathcal{V}^{0}\subset\mathcal{V} V0⊂V。
如果要求曲线是 C 1 C^1 C1连续的,则更为复杂一些。考虑 u = u 1 u=u_1 u=u1的情形。假设 P 3 1 = P 0 2 P^1_3=P^2_0 P31=P02,令 v = u − u 0 u 1 − u 0 v=\frac{u-u_0}{u_1-u_0} v=u1−u0u−u0和 w = u − u 1 u 2 − u 1 w=\frac{u-u_{1}}{u_{2}-u_{1}} w=u2−u1u−u1分别是在区间 [ u 0 , u 1 ] [u_0,u_1] [u0,u1]和 [ u 1 , u 2 ] [u_1,u_2] [u1,u2]上的局部参数, 0 ⩽ v , w ⩽ 1 0\leqslant v,w \leqslant1 0⩽v,w⩽1。在 u 1 u_1 u1处 C 1 C^1 C1连续意味着
1 u 1 − u 0 C l ( 1 ) ( v = 1 ) = C 1 ( 1 ) ( u 1 ) = C 2 ( 1 ) ( u 1 ) = 1 u 2 − u 1 C 2 ( 1 ) ( w = 0 ) \begin{aligned}\frac{1}{u_{1}-u_{0}}\mathbf{C}_{\mathrm{l}}^{\left(1\right)}\left(v=1\right)=\mathbf{C}_{1}^{\left(1\right)}\left(u_{1}\right)=\mathbf{C}_{2}^{\left(1\right)}\left(u_{1}\right) =\frac{1}{u_2-u_1}\mathbf{C}_{2}^{(1)}\left(w=0\right)\end{aligned} u1−u01Cl(1)(v=1)=C1(1)(u1)=C2(1)(u1)=u2−u11C2(1)(w=0)
由Bezier曲线在两个端点处导矢的公式
C ′ ( 0 ) = n ( P 1 − P 0 ) C ′ ′ ( 0 ) = n ( n − 1 ) ( P 0 − 2 P 1 + P 0 ) C ′ ( 1 ) = n ( P n − P n − 1 ) C ′ ′ ( 1 ) = n ( n − 1 ) ( P n − 2 P n − 1 + P n − 2 ) \begin{aligned}&\mathbf{C}^{\prime}(0) =n(\mathbf{P}_{1}-\mathbf{P}_{0})\quad\mathbf{C}^{\prime\prime}(0)=n(\mathbf{n}-1)\left(\mathbf{P}_{0}-2\mathbf{P}_{1}+\mathbf{P}_{0}\right) \\&\mathbf{C}'(1) =n(\mathbf{P}_{n}-\mathbf{P}_{n-1})\quad\mathbf{C}^{\prime\prime}(1)=n(n-1)(\mathbf{P}_{n}-2\mathbf{P}_{n-1}+\mathbf{P}_{n-2})\end{aligned} C′(0)=n(P1−P0)C′′(0)=n(n−1)(P0−2P1+P0)C′(1)=n(Pn−Pn−1)C′′(1)=n(n−1)(Pn−2Pn−1+Pn−2)
可以得到
3 u 1 − u 0 ( P 3 1 − P 2 1 ) = 3 u 2 − u 1 ( P 1 2 − P 0 2 ) \frac{3}{u_1-u_0}(\mathbf{P}_3^1-\mathbf{P}_2^1)=\frac{3}{u_2-u_1}(\mathbf{P}_1^2-\mathbf{P}_0^2) u1−u03(P31−P21)=u2−u13(P12−P02)
故有
p 3 1 = ( u 2 − u 1 ) p 2 1 + ( u 1 − u 0 ) p 1 2 u 2 − u 0 ( 2.1 ) \begin{aligned}\mathbf{p}_3^1=\frac{(u_2-u_1)\mathbf{p}_2^1+(u_1-u_0)\mathbf{p}_1^2}{u_2-u_0}\quad(2.1) \end{aligned} p31=u2−u0(u2−u1)p21+(u1−u0)p12(2.1)
(2.1)式说明 P 3 1 P^1_3 P31和 P 3 2 P^2_3 P32可分别利用 P 2 1 P^1_2 P21, P 1 2 P^2_1 P12和 P 2 2 P^2_2 P22, P 1 3 P^3_1 P13表示。因此,由 U U U上所有 C 1 C^1 C1连续的分段三次多项式曲线组成的向量空间 V 1 V^1 V1维数为8,并且有 V 1 ⊂ V 0 ⊂ V V^1\subset V^0\subset V V1⊂V0⊂V。
以上表明,对分段多项式曲线中的各个(多项式)曲线段独立地进行存储和操作并不是处理这类曲线的理想方法。原因如下:
采用如下的形式来表示分段多项式曲线
C ( u ) = ∑ i = 0 n f i ( u ) P i ( 2.2 ) \begin{aligned}\mathbf{C}(u)=\sum\limits_{i=0}^nf_i(u)\mathbf{P}_i\quad(2.2) \end{aligned} C(u)=i=0∑nfi(u)Pi(2.2)
其中 P i P_i Pi是控制点(control point); { f i ( u ) , i = 0 , 1 , ⋯ , n } \left\{f_{i}\left(\begin{matrix}{u}\\ \end{matrix}\right),i=0,1,\cdots,n\right\} {fi(u),i=0,1,⋯,n}是分段多项式函数,它们构成了定义在给定的断点序列 U = { u i } , ( i = 0 , 1 , ⋯ , m ) U=\{u_i\},(i=0,1,\cdots,m) U={ui},(i=0,1,⋯,m)上,并具有所要求的次数及(在每个内部断点处)连续性的所有分段多项式函数组成的向量空间的一组基底。注意:上式中曲线的连续性是由基函数的连续性决定的,因此,移动控制点并不改变曲线的连续性。并且, { f i } \{f_i\} {fi}还应该具有通常所需要的那些优良性质,以确保由(2.2)式定义的曲线具有类似于Bezier曲线的良好的几何性质,例如凸包性、变差减少性、几何不变性等。希望基函数具有的另一个重要性质就是局部支撑性,即每个基函数 f i ( u ) f_i(u) fi(u)仅在少数几个子区间上,而非在整个定义域 [ u 0 , u m ] [u_0,u_m] [u0,um]上非零。由于 P i P_i Pi被用 f i ( u ) f_i(u) fi(u)去乘,因此移动控制点 P i P_i Pi只影响 f i ( u ) f_i(u) fi(u)的非零子区间上(即 f i ( u ) f_i(u) fi(u)在该区间上非零)的曲线的形状。
最后,若找到了合适的分段多项式基函数,就可以构造出分段有理多项式曲线
C w ( u ) = ∑ i = 0 n f i ( u ) P i w ( 2.3 ) \mathbf{C}^w(u)=\sum\limits_{i=0}^nf_i(u)\mathbf{P}_i^w\quad(2.3) Cw(u)=i=0∑nfi(u)Piw(2.3)
以及非有理和有理的张量积曲面
S ( u , v ) = ∑ i = 0 n ∑ j = 0 n f i ( u ) g j ( v ) P i , j , S w ( u , v ) = ∑ i = 0 n ∑ j = 0 n f i ( u ) g j ( v ) P i , j w ( 2.4 ) \mathbf{S}(u,v)=\sum\limits_{i=0}^n\sum\limits_{j=0}^nf_i(u){{g}_j}(v)\mathbf{P}_{i,j},\quad\mathbf{S}^w(u,v)=\sum\limits_{i=0}^n\sum\limits_{j=0}^nf_i(u)g_j(v)\mathbf{P}_{i,j}^w\quad(2.4) S(u,v)=i=0∑nj=0∑nfi(u)gj(v)Pi,j,Sw(u,v)=i=0∑nj=0∑nfi(u)gj(v)Pi,jw(2.4)