B样条基函数:2.B样条基函数的定义和性质

有很多办法可以用来定义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 uiui+1,i=0,1,,m1。其中, 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 uNi,0(u)= 1,0,uiu<ui+1其他Ni,p(u)=ui+puiuuiNi,p1(u)+ui+p+1ui+1ui+p+1uNi+1,p1(u)(2.5)

由此可知:

  • (1) N i , 0 ( u ) N_{i,0}(u) Ni,0(u)是一个阶梯函数,它在半开区间 u ∈ [ u i , u i + 1 ) u\in[u_i,u_{i+1}) u[ui,ui+1)外都为零;
  • (2)当 p > 0 p>0 p>0时, N i , p ( u ) N_{i,p}(u) Ni,p(u)是两个 p − 1 p-1 p1次基函数的线性组合;
  • (3)计算一组基函数时需要事先指定节点矢量 U U U和次数 p p p
  • (4)(2.5)式中可能出现 0 / 0 0/0 0/0,规定 0 / 0 = 0 0/0=0 0/0=0;
  • (5) N i , p ( u ) N_{i,p}(u) Ni,p(u)是定义在整个实数轴上的分段多项式函数,但我们一般只对它在区间 [ u 0 , u m ] [u_0,u_m] [u0,um]上的部分感兴趣;
  • (6)半开区间 [ u i , u i + 1 ) [u_i,u_{i+1}) [ui,ui+1)称为第 i i i个节点区间(knot span),它的长度可以为零,因为相邻节点可以是相同的;
  • (7)计算 p p p次基函数的过程生成一个如下形式的三角形阵列:
    N 0 , 0 N 0 , 1 N 1 , 0 N 0 , 2 N 1 , 1 N 0 , 3 N 2 , 0 N 1 , 2 N 2 , 1 N 1 , 3 N 3 , 0 N 2 , 2 ⋮ N 3 , 1 ⋮ N 4 , 0 ⋮ \begin{aligned}&N_{0,0} \\&&N_{0,1} \\&N_{1,0}&&& N_{0,2} \\&&N_{1,1} &&&&N_{0,3} \\&N_{2,0}&&& N_{1,2} \\&&N_{2,1}&&&&N_{1,3} \\&N_{3,0}&&&N_{2,2} &&&\vdots \\&&N_{3,1}&&&\vdots \\&N_{4,0}&&\vdots \\ \end{aligned} N0,0N1,0N2,0N3,0N4,0N0,1N1,1N2,1N3,1N0,2N1,2N2,2N0,3N1,3

关于术语”断点“和”节点“,断点对应于节点序列中不同节点值构成的集合,具有非零长度的节点区间上定义了单独一段多项式段。因此,在使用节点这个术语时,具有两种不同的含义。一种指的是节点序列 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,0u<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=00u0N0,0+000uN1,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=00u0N1,0+101uN2,0={1u,0,其他0u<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=10u0N2,0+111uN3,0= u,0,其他0u<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=11u1N3,0+111uN4,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=00u0N0,1+101uN1,1={(1u)2,0,其他0u<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=10u0N1,1+101uN2,1={2u(1u),0,其他0u<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=10u0N2,1+111uN3,1={u2,0,其他0u<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 ∉ [ u i , u i + p + 1 ) u\notin[u_i,u_{i+p+1}) u/[ui,ui+p+1),则 N i , p ( u ) = 0 N_{i,p}(u)=0 Ni,p(u)=0
  • 在任意给定的节点区间 [ u j , u i + 1 ) [u_j,u_{i+1}) [uj,ui+1)内,最多 p + 1 p+1 p+1 N i , p N_{i,p} Ni,p是非零的,它们是 N j − p , p , ⋯   , N j , p N_{j-p,p},\cdots,N_{j,p} Njp,p,,Nj,p 。例如在 [ u 3 , u 4 ) [u_3,u_4) [u3,u4)上, 0 0 0次基函数中只有 N 3 , 0 N_{3,0} N3,0是非零的,因此,在 [ u 3 , u 4 ) [u_3,u_4) [u3,u4)上非零的 3 3 3次基函数只有 N 0 , 3 , N 1 , 3 , N 2 , 3 , N 3 , 3 N_{0,3},N_{1,3},N_{2,3},N_{3,3} N0,3,N1,3,N2,3,N3,3
  • 非负性,对于所有的 i , p i,p i,p u u u,有 N i , p ( u ) ⩾ 0 N_{i,p}(u){\geqslant}0 Ni,p(u)0 。这可以通过对 p p p利用归纳法来证明。当 p = 0 p=0 p=0时,结论显然成立;假设 p − 1 ( p ⩾ 0 ) p-1(p\geqslant0) p1(p0) 时,对任意的 i i i u u u亦成立 N i , p ( u ) ⩾ 0 N_{i,p}(u){\geqslant}0 Ni,p(u)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.6 ) N_{i,p}({u})=\frac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}({u})+\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(\boldsymbol{u})\quad(2.6) Ni,p(u)=ui+puiuuiNi,p1(u)+ui+p+1ui+1ui+p+1uNi+1,p1(u)(2.6) 又由局部支撑性,当 u ∉ [ u i , u i + p ) u\notin[u_i,u_{i+p}) u/[ui,ui+p) N i , p ( u ) = 0 N_{i,p}(u)=0 Ni,p(u)=0 。而当 u ∈ [ u i , u i + p ) u\in[u_i,u_{i+p}) u[ui,ui+p) u − u i u i + p − u i \frac{u-u_i}{u_{i+p}-u_i} ui+puiuui是非负的。由假设 N i , p − 1 ( u ) N_{i,p-1}(u) Ni,p1(u)也是非负的,因此,(2.6)式中的第一项是非负的,同理可证第二项也是非负的,故 N i , p ( u ) N_{i,p}(u) Ni,p(u)是非负的。
  • 规范性,对于任意的节点区间 [ u i , u i + 1 ) [u_i,u_{i+1}) [ui,ui+1),当 u ∈ [ u i , u i + 1 ) u\in[u_i,u_{i+1}) u[ui,ui+1) ∑ j = i − p i N j . p ( u ) = 1 \sum\limits_{j=i-p}^{i}N_{j.p}(u)=1 j=ipiNj.p(u)=1 。为了证明这个等式,考虑 ∑ j = i − p i N j , p ( u ) = ∑ j = i − p i u − u j u j + p − u j N j , p − 1 ( u ) + ∑ j = i − p i u j + p + 1 − u u j + p + 1 − u j + 1 N j + 1 , p − 1 ( u ) \sum\limits_{j=i-p}^i N_{j,p}(u)=\sum\limits_{j=i-p}^i\frac{u-u_j}{u_{j+p}-u_j}N_{j,p-1}(u)+\sum\limits_{j=i-p}^i\frac{u_{j+p+1}-u}{u_{j+p+1}-u_{j+1}}N_{j+1,p-1}(u) j=ipiNj,p(u)=j=ipiuj+pujuujNj,p1(u)+j=ipiuj+p+1uj+1uj+p+1uNj+1,p1(u) ,改变第二项中的求和变量,并利用 N i − p , p − 1 ( u ) = N i + 1 , p − 1 ( u ) = 0 N_{i-p,p-1}(u)=N_{i+1,p-1}(u)=0 Nip,p1(u)=Ni+1,p1(u)=0,有 ∑ j = i − p i N j , p ( u ) = ∑ j = i − p + 1 i ( u − u j u j + p − u j + u j + p − u u j + p − u j ) N j , p − 1 ( u ) = ∑ j = i − p + 1 i N j , p − 1 ( u ) \sum\limits_{j=i-p}^i N_{j,p}(u)=\sum\limits_{j=i-p+1}^i\Bigl(\frac{u-u_j}{u_{j+p}-u_j}+\frac{u_{j+p}-u}{u_{j+p}-u_j}\Bigr)N_{j,p-1}(u)=\sum\limits_{j=i-p+1}^i N_{j,p-1}(u) j=ipiNj,p(u)=j=ip+1i(uj+pujuuj+uj+pujuj+pu)Nj,p1(u)=j=ip+1iNj,p1(u)连续利用上面的方法进行递推可以得到 ∑ j = i − p i N j , p ( u ) = ∑ j = i − p + 1 i N j , p − 1 ( u ) = ∑ j = i − p + 2 i N j , p − 2 ( u ) = ⋯ = ∑ j = i i N j , 0 ( u ) = 1 \sum\limits_{j=i-p}^iN_{j,p}(u)=\sum\limits_{j=i-p+1}^iN_{j,p-1}(u)=\sum\limits_{j=i-p+2}^iN_{j,p-2}(u)=\cdots=\sum\limits_{j=i}^iN_{j,0}(u)=1 j=ipiNj,p(u)=j=ip+1iNj,p1(u)=j=ip+2iNj,p2(u)==j=iiNj,0(u)=1
  • 可微性,在节点区间内部, N i , p ( u ) N_{i,p}(u) Ni,p(u)是无限次可微的(在每个节点区间内部,它是一个多项式)。在节点处 N i , p ( u ) N_{i,p}(u) Ni,p(u) p − k p-k pk次连续可微的,其中 k k k是节点的重复度(multiplicity,有时也称为重数,含义相同)。因此增加次数将提高曲线的连续性,而增加节点的重复度则使连续性降低。
  • p = 0 p=0 p=0的情况外, N i , p N_{i,p} Ni,p严格地达到最大值一次。

理解重节点的作用非常重要。假设节点矢量 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连续。

你可能感兴趣的:(B样条基函数,计算机图形)