B样条曲线曲面介绍

B样条基函数

B样条基函数的定义

由de Boor和Cox分别导出B样条基函数的递推定义,B样条基函数可以表示为
Ni,0(u)={1,uiu<ui+10,Ni,p(u)=uuiui+puiNi,p1(u)+ui+p+1uui+p+1ui+1Ni+1,p1(u),p>0 \begin{aligned} N_{i,0}(u) &= \begin{cases} 1 ,\quad u_i \leqslant u < u_{i+1} \\ 0 ,\quad 其他 \end{cases} \\ N_{i,p}(u) &= \dfrac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) ,\quad p > 0 \end{aligned}
并约定0/0=00/0=0。式中pp表示B样条的幂次,uu为节点,下标ii为B样条的序号。

上式表明,任意pp次B样条基函数可由两个相邻的p1p-1次B样条基函数的线性组合构成。

B样条基函数的性质

  • 如果u[ui,ui+p+1)u\notin\left[u_i,u_{i+p+1}\right),则Ni,p(u)=0N_{i,p}(u)=0
  • u[ui,ui+1)u\in\left[u_i,u_{i+1}\right)时,j=ipiNj,p(u)=1\sum\limits_{j=i-p}^{i}N_{j,p}(u)=1

B样条基函数的导数

B样条基函数的求导公式为
Ni,p(u)=pui+puiNi,p1(u)pui+p+1ui+1Ni+1,p1(u). N^{'}_{i,p}(u)=\dfrac{p}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u).
下面通过对pp利用数学归纳法来证明求导公式。当p=1p=1时,Ni,p1(u)N_{i,p-1}(u)Ni+1,p1(u)N_{i+1,p-1}(u) 在每个节点区间内或者为00,或者为11,因此Ni,p(u)N^{'}_{i,p}(u) 等于1ui+1ui\dfrac{1}{u_{i+1}-u_i}或者1ui+2ui+1-\dfrac{1}{u_{i+2}-u_{i+1}}。我们假设当p1(p>1)p-1(p>1)时求导公式成立。根据求导法则(fg)=fg+fg(fg)^{'}=f^{'}g+fg^{'},对基函数
Ni,p(u)=uuiui+puiNi,p1(u)+ui+p+1uui+p+1ui+1Ni+1,p1(u) N_{i,p}(u)=\dfrac{u-u_i}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)
求导,得到
Ni,p(u)=1ui+puiNi,p1(u)+uuiui+puiNi,p1(u)1ui+p+1ui+1Ni+1,p1(u)+ui+p+1uui+p+1ui+1Ni+1,p1(u)=1ui+puiNi,p1(u)1ui+p+1ui+1Ni+1,p1(u)+uuiui+pui(p1ui+p1uiNi,p2(u)p1ui+pui+1Ni+1,p2(u))+ui+p+1uui+p+1ui+1(p1ui+pui+1Ni+1,p2(u)p1ui+p+1ui+2Ni+2,p2(u))=1ui+puiNi,p1(u)1ui+p+1ui+1Ni+1,p1(u)+p1ui+puiuuiui+p1uiNi,p2(u)+p1ui+pui+1(ui+p+1uui+p+1ui+1uuiui+pui)Ni+1,p2(u)p1ui+p+1ui+1ui+p+1uui+p+1ui+2Ni+2,p2(u). \begin{aligned} N^{'}_{i,p}(u)=& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)+\dfrac{u-u_i}{u_{i+p}-u_i}N^{'}_{i,p-1}(u) \\ &-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N^{'}_{i+1,p-1}(u) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{u-u_i}{u_{i+p}-u_i}\left(\dfrac{p-1}{u_{i+p-1}-u_i}N_{i,p-2}(u)-\dfrac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)\right) \\ &+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}\left(\dfrac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)-\dfrac{p-1}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)\right) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}\dfrac{u-u_i}{u_{i+p-1}-u_i}N_{i,p-2}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_{i+1}}\left(\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}-\dfrac{u-u_i}{u_{i+p}-u_i}\right)N_{i+1,p-2}(u) \\ &-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u). \end{aligned}
由于
ui+p+1uui+p+1ui+1uuiui+pui=1+ui+p+1uui+p+1ui+1+1uuiui+pui=ui+p+1ui+1ui+p+1ui+1+ui+p+1uui+p+1ui+1+ui+puiui+puiuuiui+pui=ui+puui+puiuui+1ui+p+1ui+1. \begin{aligned} \dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}-\dfrac{u-u_i}{u_{i+p}-u_i}=& -1+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}+1-\dfrac{u-u_i}{u_{i+p}-u_i} \\ =& -\dfrac{u_{i+p+1}-u_{i+1}}{u_{i+p+1}-u_{i+1}}+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}} \\ & +\dfrac{u_{i+p}-u_i}{u_{i+p}-u_i}-\dfrac{u-u_i}{u_{i+p}-u_i} \\ =&\dfrac{u_{i+p}-u}{u_{i+p}-u_i}-\dfrac{u-u_{i+1}}{u_{i+p+1}-u_{i+1}}. \end{aligned}
于是得到
Ni,p(u)=1ui+puiNi,p1(u)1ui+p+1ui+1Ni+1,p1(u)+p1ui+pui(uuiui+p1uiNi,p2(u)+ui+puui+pui+1Ni+1,p2(u))p1ui+p+1ui+1(uui+1ui+pui+1Ni+1,p2(u)+ui+p+1uui+p+1ui+2Ni+2,p2(u))=1ui+puiNi,p1(u)1ui+p+1ui+1Ni+1,p1(u)+p1ui+puiNi,p1(u)p1ui+p+1ui+1Ni+1,p1(u)=pui+puiNi,p1(u)pui+p+1ui+1Ni+1,p1(u). \begin{aligned} N^{'}_{i,p}(u)=& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}\left(\dfrac{u-u_i}{u_{i+p-1}-u_i}N_{i,p-2}(u)+\dfrac{u_{i+p}-u}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)\right) \\ &-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}\left(\dfrac{u-u_{i+1}}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)+\dfrac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)\right) \\ =& \dfrac{1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ &+\dfrac{p-1}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p-1}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u) \\ =& \dfrac{p}{u_{i+p}-u_i}N_{i,p-1}(u)-\dfrac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u). \end{aligned}
证毕。

B样条曲线曲面

B样条曲线的定义

pp次B样条曲线的定义为
P(u)=i=0nNi,p(u)Vi,aub P\left(u\right)=\sum\limits_{i=0}^{n}N_{i,p}(u)V_i,\quad a\leqslant u\leqslant b
这里{Vi}\left\{V_i\right\}是控制点,{Ni,p(u)}\left\{N_{i,p}(u)\right\}是定义在非周期(并且非均匀)节点矢量
U={a,,ap+1,up+1,,ump1,b,,bp+1} U = \left\{ \underbrace{a,\cdots,a}_{p+1}, u_{p+1},\cdots,u_{m-p-1}, \underbrace{b,\cdots,b}_{p+1} \right\}
(包含m+1m+1个节点)上的pp次B样条基函数。由{Vi}\left\{V_i\right\}构成的多边形称为控制多边形。

有理B样条曲线曲面

NURBS曲线的定义

一条pp次NURBS曲线的定义为
P(u)=i=0nNi,p(u)ωiVii=0nNi,p(u)ωi,aub P\left(u\right)=\dfrac{\sum\limits_{i=0}^{n}N_{i,p}(u)\omega_iV_i}{\sum\limits_{i=0}^{n}N_{i,p}(u)\omega_i},\quad a\leqslant u\leqslant b
这里{Vi}\left\{V_i\right\}是控制点(它们形成控制多边形),{ωi}\left\{\omega_i\right\}是权因子,{Ni,p(u)}\left\{N_{i,p}(u)\right\}是定义在非周期(并且非均匀)节点矢量UU上的pp次B样条基函数。其中
U={a,,ap+1,up+1,,ump1,b,,bp+1} U = \left\{ \underbrace{a,\cdots,a}_{p+1}, u_{p+1},\cdots,u_{m-p-1}, \underbrace{b,\cdots,b}_{p+1} \right\}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章