非均匀有理B样条

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

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

1、非均匀有理B样条(学习记录和上机练习)非均匀有理 B 样条,通常简称为 NURBS(Non-Uniform Rational B-Splines)。NURBS 是 非有理B样条、有理以及非有理Bezier曲线曲面的推广。一、 Bezier 曲线1、 Bezier 曲线一条n次Bezier曲线可以表示为C (u) = B (u) Pi ,nii=0OW u wi其中,基函数(也称为混合函数)(u)1是著名的n次Bernstein多项式,i,n(i)其定义为B (u ) =i,nn!i!(n - i)!ui (1 一 u) n-i2)(1) 式中的几何系数& 1称为控制点。i/计算参数U的n次基函

2、数值并存在B中 void Bernstein(int n,double u,float B)double u1;int j,k;BO=1.O;u1=1.O-u;for(j=1;j=n;j+)float saved=O.O;for(k=O;k0时,N (u)是两个p-1次基函数的线性组合;i,p(3) 计算一组基函数时需要事先指定节点矢量U和次数p;( 4)上式中可能出现 0/0,我们规定 0/0=0;(5) N (u)是定义在整个实数轴上的分段多项式函数,它在区间u ,u 上有意义;i , p0 m(6) 半开区间u ,u )称为第i个节点区间,它的长度可以为零,因为相邻节点可以i i+1是相

3、同的;(7) 计算p次基函数的过程生成一个三角阵列。性质:1局部支撑性,如果u电u ,u ),则N (u) =0。i i + p +1i , p2非负性,对于所有的i,p和u,有N (u)三0。i,p3规范性,对于任意的节点区间u ,u ),当u e u ,u )时丈N (u) = 1。i i +1i i +1j , pj=i - p4可微性,在节点区间内部,N (u)是无限次可微的(在每个节点区间内部,它是一i,p个多项式),在节点处N (u)是p-k次连续可微的,其中k是节点的重复度。i,p2、B样条基函数的导数1 基函数的求导公式为:N = p N (u) + p N(u)(5)i,p

4、u -u i,p-1u- ui+1,p-1i+pii+ p+1i+1对基函数求导得到一般的求导公式:N (k) = p i,pN (k -1) i, p-1N(k-1)i+1: p1u - ui+ piu ui+p+1i+1为了完整性,另一个计算B样条基函数各阶导数的公式(参考Butt76):N (k)=i, pp - kN (k)i, p1u 一 ui+p+1N (k)i+1, p1丿k 二 0,1,7)u - ui + p +1i +1/计算所有非零B样条基函数并返回其值i为参数u所在的节点区间下标void BasisFunction(int i,int p,float u,float U

5、,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=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) tmpN

6、di0=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;else left=0,dl=0;if(tur!=0)right=(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;这里仏是控制点,d (u)屋定义在

7、非周期节点矢量上的p次B样条基函数。ii, p除非另外声明,我们假定a=0,b=1,并且a和b的个数为(p+1)个。2 性质:(1)如果 n=p, U=0,.,0,1,.,1,那么 C(u)是 Bezier 曲线(如下图所示)。P0P1 八 P2 7图8、定义在U=0,0,0,/1,1*;上的三次B样条曲线是三次Bezier曲线(2)C(u)是分段多项式曲线曰严;插是分段多项式函数);次数P,控制点个 数n+1和节点个数m+1满足关系:m=n+P+1。(3)端点插值性:C(0)=P0,C(1)=P*。/(4)仿射不变性:对B样条曲线进行仿射变换,所得曲线不变。(5)强凸包性:曲线C(u)包含在

8、它的控制多边形的凸包内。(6)局部修改性:移动P只改变C(u)在区间u ,u )上的形状。这是因为对于如ii i+1(9)C(u)在节点区间内部是无限次可微的。(10)变差减少性:任何一个平面与曲线的交点个数不多于它和控制多边形的交点 个数。(11)利用重控制顶点是可能的。3 B 样条曲线的导矢C(k)(u) = N(k)(u)P(9)i, pii=0计算样条曲线的1阶导矢(u所对应的所有点)保存在Der中/n=m-p-1/p 为曲线的次数void BSplineDer(int n,int p,float U,float P,float Der)float N100,tmp;int i,j;f

9、or(i=p+1;i=i-p;j-) tmp+=Nj*Pj;Deri-p=tmp;计算曲线上的点(u所对应的所有点)保存在Poi中/n=m-p-1/p 为曲线的次数void BSplinePoint(int n,int 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样条基函数的乘积来定 义,其方程为S(u,v)=埜N (u)N (v)P(10)i,pj,qi, ji=0 j =

10、0节点矢量为和U中含有r+1个节点,V中含有s+1个节点(r=n+p+1, s=m+q+1 )。图10、双三次B样条曲面5 上机练习下面用双二次B样条曲面生成一个简单飞机模型为例说明曲面生成的过程。图11、双二次B样条曲面生成的飞机模型实物图图12、双二次B样条曲面生成的飞机模型网格图程序源如下:#include glut.h#include 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,10

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

当前位置:首页 > 学术论文 > 其它学术论文

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