非均匀有理B样条

上传人:鲁** 文档编号:543631443 上传时间:2022-08-21 格式:DOC 页数:22 大小:221KB
返回 下载 相关 举报
非均匀有理B样条_第1页
第1页 / 共22页
非均匀有理B样条_第2页
第2页 / 共22页
非均匀有理B样条_第3页
第3页 / 共22页
非均匀有理B样条_第4页
第4页 / 共22页
非均匀有理B样条_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《非均匀有理B样条》由会员分享,可在线阅读,更多相关《非均匀有理B样条(22页珍藏版)》请在金锄头文库上搜索。

1、非均匀有理B样条(学习记录和上机练习)。NURBS 是非均匀有理 B 样条,通常简称为 NURBS(Non-Uniform Rational B-Splines) 非有理B样条、有理以及非有理Bezier曲线曲面的推广。一、Bezier 曲线1、Bezier 曲线一条n次Bezier曲线可以表示为n(1)其定义为(2)C(u)八 Bj,n(U)R ow u W 1i =0其中,基函数(也称为混合函数)匕)是著名的n次Bernstein多项式,n!in _iBi,n(u)U(1-U)i!( n i)!(1) 式中的几何系数R 1称为控制点。/计算参数u的n次基函数值并存在 B中void Bern

2、 ste in (i nt n, double u,float B)double u1;int j,k;B0=1.0;u1=1.0-u;for(j=1;j=n ;j+)float saved=0.0;for(k=0;kj;k+)float temp=Bk;Bk=saved+u1*temp; saved=u*temp;Bj=saved;2、有理Bezier曲线一条n次有理Bezier曲线的定义为n B,n(u)WjRC(u)二埒0 u w 1 Bi,n(u)Wii =0其中Wi是标量,称为权因子。图1、3次Bezier曲线图 3、n=3 Bernstein 图形图5、Bezier双三次曲面片二、

3、B样条基函数1、B样条基函数的定义和性质图2、3次有理Bezier曲线 图 4、n=9 Bernstein 图形图6、有理Bezier双三次曲面片令U =山,*,Um是一个实数序列,即Ui 0时,Nj,p(u)是两个p-1次基函数的线性组合;(3) 计算一组基函数时需要事先指定节点矢量U和次数p;(4) 上式中可能出现 0/0,我们规定0/0=0 ;(5) Ni,p(u)是定义在整个实数轴上的分段多项式函数,它在区间u,Um上有意义;(6) 半开区间Ui,UiJ称为第i个节点区间,它的长度可以为零,因为相邻节点可以 是相同的;(7) 计算p次基函数的过程生成一个三角阵列。 性质:1 局部支撑性

4、,如果 U-Ui,Ui .p1),则 Ni,p(u) = 0。2非负性,对于所有的i,p和U,有Nj,p(u) 0。i3规范性,对于任意的节点区间Ui,U“),当uUi,Ui卅)时E Nj,p(u)=1 。j占 P4可微性,在节点区间内部,Nj,p(u)是无限次可微的(在每个节点区间内部,它是一个多项式),在节点处Nj,p(u)是p-k次连续可微的,其中k是节点的重复度。2、B样条基函数的导数1基函数的求导公式为:N,pp Ni,p4(u)pNig)(5)ui4p 一5UHp+ _ur1对基函数求导得到一般的求导公式:N-p = pNi(kpiui p ui为了完整性,另一个计算B样条基函数各

5、阶导数的公式(参考Butt76):Ml七p ku _uNi爲- Ui4p卅 _U Ni(:puh:;p _Uiu i Up 1_ u i 1k = 0,1;, p - 1(7)/计算所有非零B样条基函数并返回其值i为参数u所在的节点区间下标void BasisFunction(int i,int p,float u,float U,float N)int j,di,dp,k;float tul,tur,left,right;float tmpN5050;for(k=0;k=i-k;di-)if(u=Udi&uUdi+1) tmpNdi0=1;elsetmpNdi0=0;dp+=1; for(j

6、=1;j2void DerBasisFunc(int i,int p,float u,float U,float NP)int j,di,dp,k;float tul,tur,left,right,saved,dl,dr;float tmpN5050;for(k=0;k=i-k;di-)if(u=Udi&uUdi+1)tmpNdi0=1;elsetmpNdi0=0;dp+=1;for(j=1;jdp;j+)tul=Udi+j-Udi;tur=Udi+j+1-Udi+1;if(tul!=0)left=(u-Udi)/tul,dl=1/tul;elseleft=0,dl=0;if(tur!=0)r

7、ight=(Udi+j+1-u)/tur,dr=1/tur;elseright=0,dr=0;tmpNdij=left*tmpNdij-1+right*tmpNdi+1j-1; saved=p*(dl*tmpNdij-1-dr*tmpNdi+1j-1)/(p+1);NPi-k=saved;这里r 是控制点,Nj,p(u)是定义在非周期节点矢量上的p次B样条基函数。除非另外声明,我们假定a=0, b=1,并且a和b的个数为(p+1)个。2性质:(1)如果n=p, U=0,0,1,1,那么C(u)是Bezier曲线(如下图所示)。P0P1 K P2 7 图8 定义在 U=0,0,0,0,1,1,1

8、,1.;上的三次 B样条曲线是三次 Bezier曲线(2) C(u)是分段多项式曲线(因M N,,-p(uV是分段多项式函数);次数p,控制点个数n+1和节点个数 m+1满足关系:m=n+p+1 。(3) 端点插值性:C(0)=P0 , C(1)=p J(4) 仿射不变性:对 B样条曲线进行仿射变换,所得曲线不变。(5) 强凸包性:曲线 C(u)包含在它的控制多边形的凸包内。(6) 局部修改性:移动 P只改变C(u)在区间比,5上的形状。这是因为对于如果 u UiUi p 1),则 Ni,p(u) =0。P0图9移动P3(7)P3控制多边形是对B样条(8)P6P 3P局部修改曲线勺一个分段线性

9、逼近。基函数r Ni,p(u)只与对应的区间有意(9) C(u)在节点区间内部是无限次可微的。(10) 变差减少性:任何一个平面与曲线的交点个数不多于它和控制多边形的交点个数。(11) 利用重控制顶点是可能的。3 B样条曲线的导矢n(9)C(k)(u)八 N(,k)(u)Pi=0计算样条曲线的1阶导矢(u所对应的所有点)保存在 Der中n=m_p_1p为曲线的次数void BSpli neDer(i nt n,i nt p,float U,float P,float Der)float N100,tmp;int i,j;for(i=p+1;i=i-p;j-)tmp+=Nj*Pj;Deri-p=

10、tmp;/计算曲线上的点(u所对应的所有点)保存在 Poi中n=m_p_1/p为曲线的次数void BSpli nePoi nt(i nt n,i nt p,float U,float P,float Poi)float N100,tmp;int i,j;for(i=p+1;i=i-p;j-)tmp+=Nj*Pj;Poii-p=tmp;4 B样条曲面的定义B样条曲面由两个方向的控制点网格,两个节点矢量和单变量B样条基函数的乘积来定义,其方程为n mS(u,v)二 Ni,p(u)Nj,q(v)R,j( 10)i=0 j =S节点矢量为和U中含有r+1个节点,V中含有s+1个节点(r=n+p+1,

11、s=m+q+1 )。图10、双三次B样条曲面5上机练习下面用双二次B样条曲面生成一个简单飞机模型为例说明曲面生成的过程。图11、双二次B样条曲面生成的飞机模型实物图图12、双二次B样条曲面生成的飞机模型网格图程序源如下:#i nclude glut.h#in clude math.h/飞机机身头部数据float hx=-360,-360,-360,-360,-360,-360,-360,-350,-350,-350,-350,-350,-350,-350,-300,-300,-300,-300,-300,-300,-300,-250,-250,-250,-250,-250,-250,-250,-200,-200,-200,-200,-200,-200,-200,-50,-50,-50,-50,-50,-50,-50,0,0,0,0,0,0,0;float hy=0,0,0,0,0,0,0,0,20,20,0,-20,-20,0,0,40,40,0,-40,-40,0,0,60,60,0,-60,-60,0,0,120,120,0,-60,-60,0,0,110,110,0,-60,-60,0,0,100,100,0,-60,-60,0;float hz=0,0,0,0,0,0,0,-20,-20,20

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号