有很多办法可以用来定义B样条基函数以及证明它的一些重要性质。例如,可以采用截尾幂函数的差商定义,开花定义,以及由德布尔、考克斯和曼斯菲尔德等人提出的递推公式等来定义。这里采用递推定义方法,因为这种方法在计算机实现中是最有效的。
令 U = { u 0 , u 1 , ⋯ , u m } U=\{u_0,u_1,\cdots,u_m\} U={u0,u1,⋯,um}是一个单调不减的实数序列,即 u i ⩽ u i + 1 , i = 0 , 1 , ⋯ , m − 1 u_{i}{\leqslant}u_{i+1},i{=}0,1,\cdots,m-1 ui⩽ui+1,i=0,1,⋯,m−1。其中, u i u_i ui称为节点, U U U称为节点矢量,用 N i , p ( u ) N_{i,p}(u) Ni,p(u)表示第 i i i个 p p p次( p + 1 p+1 p+1阶)B样条基函数,其定义为
N i , 0 ( u ) = { 1 , 若 u i ⩽ u < u i + 1 0 , 其他 N i , p ( u ) = u − u i u i + p − u i N i , p − 1 ( u ) + u i + p + 1 − u u i + p + 1 − u i + 1 N i + 1 , p − 1 ( u ) ( 2.5 ) \begin{aligned}& \\&N_{i,0}(u)=\begin{cases}1,&若 u_i\leqslant u
由此可知:
关于术语”断点“和”节点“,断点对应于节点序列中不同节点值构成的集合,具有非零长度的节点区间上定义了单独一段多项式段。因此,在使用节点这个术语时,具有两种不同的含义。一种指的是节点序列 U U U中不同的值(断点),另一种指的是 U U U中的一个元素( U U U中可能存在另外的与其相等的节点)。
令 U = { u 0 = 0 , u 1 = 0 , u 2 = 0 , u 3 = 1 , u 4 = 1 , u 5 = 1 } U=\{u_{0}=0,u_{1}=0,u_{2}=0,u_{3}=1,u_{4}=1,u_{5}=1\} U={u0=0,u1=0,u2=0,u3=1,u4=1,u5=1}, p = 2 p=2 p=2,分别计算 0 0 0次、 1 1 1次和 2 2 2次的B样条基函数。
N 0 , 0 = N 1 , 0 = 0 , − ∞ < u < ∞ N_{0,0}=N_{1,0}=0,\quad-\inftyN0,0=N1,0=0,−∞<u<∞
N 2 , 0 = { 1 , 0 ⩽ u < 1 0 , 其他 N_{2,0}=\begin{cases}1,\quad 0\leqslant u < 1\\0,\quad 其他\end{cases} N2,0={1,0⩽u<10,其他
N 3 , 0 = N 4 , 0 = 0 , − ∞ < u < ∞ N_{3,0}=N_{4,0}=0,\quad-\inftyN3,0=N4,0=0,−∞<u<∞
N 0 , 1 = u − 0 0 − 0 N 0 , 0 + 0 − u 0 − 0 N 1 , 0 = 0 , − ∞ < u < ∞ N_{0,1}=\frac{{u}-0}{0-0}{N}_{0,0}+\frac{0-{u}}{0-0}{N}_{1,0}=0,\quad-\infty<{u}<\infty N0,1=0−0u−0N0,0+0−00−uN1,0=0,−∞<u<∞
N 1 , 1 = u − 0 0 − 0 N 1 , 0 + 1 − u 1 − 0 N 2 , 0 = { 1 − u , 0 ⩽ u < 1 0 , 其他 N_{1,1}=\frac{u-0}{0-0}N_{1,0}+\frac{1-u}{1-0}N_{2,0}=\begin{cases}1-u,&0\leqslant u<1\\0,\quad 其他\end{cases} N1,1=0−0u−0N1,0+1−01−uN2,0={1−u,0,其他0⩽u<1
N 2 , 1 = u − 0 1 − 0 N 2 , 0 + 1 − u 1 − 1 N 3 , 0 = { u , 0 ⩽ u < 1 0 , 其他 N_{2,1}=\frac{{u}-0}{1-0}{N}_{2,0}+\frac{1-{u}}{1-1}{N}_{3,0}=\begin{cases}{u},&0\leqslant{u}<1\\[6pt]0,\quad 其他\end{cases} N2,1=1−0u−0N2,0+1−11−uN3,0=⎩ ⎨ ⎧u,0,其他0⩽u<1
N 3 , 1 = u − 1 1 − 1 N 3 , 0 + 1 − u 1 − 1 N 4 , 0 = 0 , − ∞ < u < ∞ N_{3,1}=\frac{u-1}{1-1}N_{3,0}+\frac{1-u}{1-1}N_{4,0}=0,\quad-\inftyN3,1=1−1u−1N3,0+1−11−uN4,0=0,−∞<u<∞
N 0 , 2 = u − 0 0 − 0 N 0 , 1 + 1 − u 1 − 0 N 1 , 1 = { ( 1 − u ) 2 , 0 ⩽ u < 1 0 , 其他 N_{0,2}=\frac{u-0}{0-0}N_{0,1}+\frac{1-u}{1-0}N_{1,1}=\begin{cases}(1-u)^2,&0\leqslant u<1\\[0.3em]0,\quad 其他\end{cases} N0,2=0−0u−0N0,1+1−01−uN1,1={(1−u)2,0,其他0⩽u<1
N 1 , 2 = u − 0 1 − 0 N 1 , 1 + 1 − u 1 − 0 N 2 , 1 = { 2 u ( 1 − u ) , 0 ⩽ u < 1 0 , 其他 N_{1,2}=\frac{u-0}{1-0}N_{1,1}+\frac{1-u}{1-0}N_{2,1}=\begin{cases}2u(1-u),&0\leqslant u<1\\0,\quad 其他\end{cases} N1,2=1−0u−0N1,1+1−01−uN2,1={2u(1−u),0,其他0⩽u<1
N 2 , 2 = u − 0 1 − 0 N 2 , 1 + 1 − u 1 − 1 N 3 , 1 = { u 2 , 0 ⩽ u < 1 0 , 其他 N_{2,2}=\frac{u-0}{1-0}N_{2,1}+\frac{1-u}{1-1}N_{3,1}=\begin{cases}u^2,&0\leqslant u<1\\0,\quad 其他\end{cases} N2,2=1−0u−0N2,1+1−11−uN3,1={u2,0,其他0⩽u<1
注意,将基函数 N i , 2 N_{i,2} Ni,2限制在区间 u ∈ [ 0 , 1 ] u \in [0,1] u∈[0,1]上,恰好为 2 2 2次Bernstein多项式,因此,节点矢量形如
U = { 0 , ⋯ , 0 ⏟ p + 1 , 1 , ⋯ , 1 ⏟ p + 1 } U=\{\underbrace{0,\cdots,0}_{p+1},\underbrace{1,\cdots,1}_{p+1}\} U={p+1 0,⋯,0,p+1 1,⋯,1}
的B样条表示形式是Bezier表示形式的推广。
B样条基函数的重要性质,假定次数为 p p p,节点矢量 U = { u 0 , u 1 , ⋯ , u m } U=\{u_0,u_1,\cdots,u_m\} U={u0,u1,⋯,um}。
理解重节点的作用非常重要。假设节点矢量 U = { 0 , 0 , 0 , 1 , 2 , 3 , 4 , 4 , 5 , 5 , 5 } U=\{0,0,0,1,2,3,4,4,5,5,5\} U={0,0,0,1,2,3,4,4,5,5,5} 。计算基函数时只涉及以下的节点区间,在这些区间外基函数为零: N 0 , 2 : { 0 , 0 , 0 , 1 } N 1 , 2 : { 0 , 0 , 1 , 2 } N 2 , 2 : { 0 , 1 , 2 , 3 } N 5 , 2 : { 3 , 4 , 4 , 5 } N 6 , 2 : { 4 , 4 , 5 , 5 } N_{0,2}:\{0,0,0,1\}\quad N_{1,2}:\{0,0,1,2\}\quad N_{2,2}:\{0,1,2,3\} \quad N_{5,2}:\{3,4,4,5\} \quad N_{6,2}:\{4,4,5,5\} N0,2:{0,0,0,1}N1,2:{0,0,1,2}N2,2:{0,1,2,3}N5,2:{3,4,4,5}N6,2:{4,4,5,5}
因而,”重复度“一次也有两种不同的理解方式:
例如, u = 0 u=0 u=0在节点矢量 U = { 0 , 0 , 0 , 1 , 2 , 3 , 4 , 4 , 5 , 5 , 5 } U=\{0,0,0,1,2,3,4,4,5,5,5\} U={0,0,0,1,2,3,4,4,5,5,5} 中的重复度是 3 3 3;但是,对于基函数 N 0 , 2 N_{0,2} N0,2, N 1 , 2 N_{1,2} N1,2, N 2 , 2 N_{2,2} N2,2和 N 5 , 2 N_{5,2} N5,2而言, u = 0 u=0 u=0的重复度分别为 3 3 3, 2 2 2, 1 1 1和 0 0 0 。由基函数性质可微性可知,在 u = 0 u=0 u=0处 N 0 , 2 N_{0,2} N0,2不连续, N 1 , 2 N_{1,2} N1,2是 C 0 C^0 C0连续的, N 2 , 2 N_{2,2} N2,2是 C 1 C^1 C1连续,而 N 5 , 2 N_{5,2} N5,2则完全不受( u = 0 u=0 u=0的重复度的)影响( N 5 , 2 N_{5,2} N5,2和它的所有导数在 u = 0 u=0 u=0处都为 0 0 0)。从 N 1 , 2 N_{1,2} N1,2的角度看, u = 0 u=0 u=0是一个二重节点,所以它是 C 0 C^0 C0连续的;而从 N 2 , 2 N_{2,2} N2,2来看,它的所有节点重复度均为 1 1 1,因此,它是 C 1 C^1 C1连续的。很明显,由上面的例子可以看出,重节点的另一个作用就是减少基函数的非零区间的个数。例如, N 6 , 2 N_{6,2} N6,2仅在区间 u ∈ [ 4 , 5 ) u\in[4,5) u∈[4,5)上是非零的,它在 u = 4 u=4 u=4和 u = 5 u=5 u=5处只达到 C 0 C^0 C0连续。