B-样条曲线曲面导函数推导

B-样条基函数的定义及其导函数

定义:给定参数u轴的一个部分U:\begin{Bmatrix} {u_{i}} \end{Bmatrix}_{i=-\infty }^{+\infty }(u_{i}\leqslant u_{i+1},i=0\pm 1,...)用下列递推方式所确定的函数N_{i,p}(u)称为相应于部分Up次,即p+1阶B样条基函数:  

\left\{\begin{matrix}N_{i,0}(u)=\left\{\begin{matrix}1, u\in [u_{i},u_{i+1}) \\ 0, otherwise \end{matrix}\right. \\ 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},p\geqslant 2 \\ \end{matrix}\right.

我们称该式为de Boor-Cox公式,U称为节点序列或节点向量,u_{i}称为节点。若u_{j-1}<u_{j}=u_{j+1}=\begin{matrix}... \end{matrix}=u_{j+l},则称u_{j},u_{j+1},\begin{matrix}... \end{matrix},u_{j+l}为U的l重节点。

B样条基函数求导公式

N_{i,p}(u)=\frac{p}{u_{i+p}-u_{i}}N_{i,p-1}(u)+\frac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)

下面我们使用数学归纳法对基函数进行求导:

对于p=1,很显然我们可以得到其导数为\frac{1}{u_{i+1}-u_{i}}或者\frac{-1}{u_{i+1}-u_{i}}

对于p\geq 2,假设k\leqslant p-1(这里k为方程的次数)时有

 N_{i,p-1}(u)=\frac{p-1}{u_{i+p-1}-u_{i}}N_{i,p-2}(u)+\frac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)

k=p

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)+\frac{u-u_{i}}{u_{i+p}-u_{i}}N_{i,p-1}^{'}(u)-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}^{'}(u)

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)+\frac{u-u_{i}}{u_{i+p}-u_{i}}(\frac{p-1}{u_{i+p-1}- u_{i}}N_{i,p-2}(u)-\frac{p-1}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u))-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}(\frac{p-1}{u_{i+p}- u_{i+1}}N_{i+1,p-2}(u)-\frac{p-1}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u))

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{p-1}{u_{i+p}-u_{i}}\frac{u-u_{i}}{u_{i+p-1}-u_{i}}N_{i,p-2}(u)+\frac{p-1}{u_{i+p}-u_{i+1}}(\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}-\frac{u-u_{i}}{u_{i+p}-u_{i}})N_{i+1,p-2}(u)-\frac{p-1}{u_{i+p+1}-u_{i+1}}\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{p-1}{u_{i+p}-u_{i}}\frac{u-u_{i}}{u_{i+p-1}-u_{i}}N_{i,p-2}(u)+\frac{p-1}{u_{i+p}-u_{i+1}}(\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+1}}+1-1-\frac{u-u_{i}}{u_{i+p}-u_{i}})N_{i+1,p-2}(u)-\frac{p-1}{u_{i+p+1}-u_{i+1}}\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u)

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{p-1}{u_{i+p}-u_{i}}(\frac{u-u_{i}}{u_{i+p-1}-u_{i}}N_{i,p-2}(u)+\frac{u_{i+p}-u}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u))-\frac{p-1}{u_{i+p+1}-u_{i+1}}(\frac{u-u_{i+1}}{u_{i+p}-u_{i+1}}N_{i+1,p-2}(u)+\frac{u_{i+p+1}-u}{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}(u))

N_{i,p}^{'}(u)=\frac{1}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)+\frac{p-1}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{p-1}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)

N_{i,p}^{'}(u)=\frac{p}{u_{i+p}-u_{i}}N_{i,p-1}(u)-\frac{p}{u_{i+p+1}- u_{i+1}}N_{i+1,p-1}(u)

至此,B样条基函数求导过程结束啦!

B-样条曲线的定义及其导函数

定义:设有n+1个空间向量\begin{Bmatrix} P_{i} \end{Bmatrix}_{i=0}^{n}\epsilon \mathbb{R}^{3},N_{i,p}(u)是定义在节点向量U={u_{0},u_{1},...,u_{n+p+1}}(u_{i}\leqslant u_{i+1},i=0,1,...,n+p)上的p次B样条基函数(n\geqslant p),则称

C(u)=\sum_{i=0}^{n}P_{i}N_{i,p}(u),u\epsilon[u_{p},u_{n+1})

为相应于节点向量Up次非均匀的B样条曲线,称P_{i}为控制顶点,折线P_{0}...P_{n}为控制多变形。

B样条曲线求导公式

\frac{\mathrm{d}C(u) }{\mathrm{d} u}=\sum_{i=1}^{n}\frac{p(P_{i}-P_{i-1}))}{u_{p+i}-u_{i}}N_{i,p-1}(u)

详细推导如下:

\frac{\mathrm{d}C(u) }{\mathrm{d} u}=p(\frac{P_{0}}{u_{p}-u_{0}}N_{0,p-1}(u)-\frac{P_{0}}{u_{p+1}-u_{1}}N_{1,p-1}(u)+\frac{P_{1}}{u_{p+1}-u_{1}}N_{1,p-1}(u)-\frac{P_{1}}{u_{p+2}-u_{2}}N_{2,p-1}(u)+...+\frac{P_{n}}{u_{p+n}-u_{n}}N_{n,p-1}(u)-\frac{P_{n}}{u_{p+n}-u_{n+1}}N_{n+1,p-1}(u))

对于给定的u \epsilon [u_{p},u_{n+1}),可以注意到N_{0,p-1}(u)=N_{n+1,p-1}(u)=0,因此有

\frac{\mathrm{d}C(u) }{\mathrm{d} u}=\sum_{i=1}^{n}\frac{p(P_{i}-P_{i-1}))}{u_{p+i}-u_{i}}N_{i,p-1}(u)

小编要来给大家解释一下为什么N_{0,p-1}(u)=N_{n+1,p-1}(u)=0

根据基函数的局部支集性即

N_{i,p}(u)=0,u\epsilon (-\infty ,u_{i})\cup [u_{i+p+1,+\infty })

我们来看N_{0,p-1}(u)\neq 0, u\epsilon[0,p)N_{n+1,p-1}(u)\neq 0,u\epsilon [n+1,n+p+1)所以N_{0,p-1}(u)=N_{n+1,p-1}(u)=0是合理的。

(不知道小编的解释是否合理,因为小编也是自学研究的这个,所以若有更好的解释评论区见)

 B样条曲面的定义及其导函数

定义:给定(m+p)\times (n+q)个空间向量P_{i,j}\epsilon \mathbb{R}^{3}(i=-p,-p+1,...,m-1,j=-q,-q+1,...,n-1),N_{i,p}(u)N_{j,q}(v)分别为定义在节点向量U=\begin{Bmatrix} u_{-p},u_{-p+1},...,u_{m+p} \end{Bmatrix}V=\begin{Bmatrix} v_{-p},v_{-p+1},...,v_{n+p} \end{Bmatrix}上的一元p次和q次B样条基函数,则与其相应的张量积曲面

C(u,v)=\sum_{i=-p}^{m-1}\sum_{j=-p}^{n-1}P_{i,j}N_{i,p}(u)N_{j,q}(v),(u,v)\epsilon [u_{0},u_{m}]\times [v_{0},v_{n}]

称为一个p\times q次B样条曲面。P_{i,j}称为控制顶点,依次用直线段连接同行同列相邻两个控制点所得的折线网格称为控制网格。

B样条曲面的求导公式

先引入曲面基函数求导公式,如下:

\frac{\partial }{\partial u}N_{i,p}(u)N_{j,q}(v)=\frac{p}{u_{i+p}-u_{i}}N_{i,p-1}(u)N_{j,q}(v)-\frac{p}{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)N_{j,q}(v)

\frac{\partial }{\partial v}N_{i,p}(u)N_{j,q}(v)=\frac{q}{v_{j+q}-v_{j}}N_{i,p}(u)N_{j,q-1}(v)-\frac{q}{v_{j+q+1}-v_{j+1}}N_{j,p}(u)N_{j+1,q-1}(v)

B样条曲面求导公式如下(推导过程类比B样条曲线推导)

\frac{\partial }{\partial u}C(u,v)=\sum_{i=1}^{n}\sum_{j=0}^{n}(P_{i,j}-P_{i-1,j})\frac{p}{u_{i+p}-u_{i}}N_{i,p-1}(u)N_{j,p}(v)

\frac{\partial }{\partial v}C(u,v)=\sum_{i=1}^{n}\sum_{j=0}^{n}(P_{i,j}-P_{i,j-1})\frac{p}{v_{j+p}-v_{j}}N_{i,p}(u)N_{j,p-1}(v)

最近在看论文时发现好多文章会使用u=0这个条件对B样条曲面求导公式进行简化,下面我带大家继续推导一下(假设此时p=5)

N_{i,5}(u)N_{j,5}(v)是由节点向量U=V=\begin{Bmatrix} 0,0,0,0,0,0,t_{6},t_{7},...,t_{n},1,1,1,1,1,1 \end{Bmatrix}生成的五次B样条基函数,我们假设h=t_{j+1}-t_{j}=\frac{1}{n-4},j=5,...,n

N_{i,4}(u)的左边界节点0的重数为5,根据重节点的差值基函数性质,N_{i,4}(u),i=1,2,...,n只有N_{1,4}=1,即U=\begin{Bmatrix} 0,0,0,0,0, t_{6}\end{Bmatrix},其余均为0,所以                                                         

\frac{\partial }{\partial u}C(u,v)\mid _{u=0}=\sum_{j=0}^{n}(P_{1,j}-P_{0,j})\frac{5}{h}N_{j,5}(v)

N_{i,5}(u)的左边界节点0的重数为6,根据重节点的差值基函数性质,N_{i,5}(u),i=0,1,2,...,n只有N_{0,5}=1,即U=\begin{Bmatrix} 0,0,0,0,0,0 \end{Bmatrix},其余均为0,所以                                                        

\frac{\partial }{\partial v}C(u,v)\mid _{u=0}=\sum_{j=1}^{n}(P_{0,j}-P_{0,j-1})\frac{5}{v_{j+5}-v_{j}}N_{j,4}(v)

综上,小编想要分享给大家的就结束啦!若有任何疑问或者有任何的建议都可以在评论区留言,大家和小编一起进步!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值