B样条曲线曲面和NURBS曲线曲面C语言算法源程序..doc

B样条曲线曲面和NURBS曲线曲面C语言算法源程序..doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
B样条曲线曲面和NURBS曲线曲面C语言算法源程序.

学习小结:前面学习了Bezier曲线,B样条基函数和B样条曲线的一些基础知识。掌握关键问题是一条B样条曲线间的多段曲线的光滑连接。因为现在是用多段Bezier曲线来描绘一条B样条曲线,所以问题变为两段Bezier曲线间光滑连接。两段Bezier曲线段(3次)B1和B2光滑连接的条件: (1).要求B1和B2有共同的连接点,即G0连续。 (2).要求B1和B2在连接点处有成比例的一阶导数,即G1连续。由端点处的一阶导数,为实现G1连续,则有: 即: 这也表明,三点共线。如下图表示了一条3次B样条曲线的所有控制多边形: (P1) P2 P3 P4 (P11) (P12) P5 P10 P0 P6 P9 P7 P8 图5.3次B样条曲线和所有控制多边形 图5中,P0至P6为原始3次B样条曲线控制多边形顶点,P0至P12是计算后最终形成B样条曲线控制多边形顶点。 图6.双二次(2x2)B样条曲面 6.B样条曲线曲面和NURBS曲线曲面的C语言实现算法源程序 #ifndef _mynurbs_h #ifndef _MYNURBS_H #include gl\gl.h #include math.h //*-*-*-*-*-*-*-*-*-*-*-*-*-*-* B样条基函数计算部分 *-*-*-*-*-*-*-*-*-*-*-*-*-* //确定参数u所在的节点区间下标 //n=m-p-1 //m为节点矢量U[]的最大下标 //p为B样条函数次数 int FindSource(int n,int p,float u,float U[]) { int low,high,mid; if(u==U[n+1])//特殊情况 return n; //进行二分有哪些信誉好的足球投注网站 low=p; high=n+1; mid=(int)(low+high)/2; while(uU[mid]||uU[mid]) { if(uU[mid]) high=mid; else low=mid; mid=(int)(low+high)/2; if(u=U[mid]uU[mid+1])//找到u所在的节点区间的下标 break; //退出二分有哪些信誉好的足球投注网站 } return mid; //返回区间下标 } //计算所有非零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 tmpN[50][50]; for(k=0;k=p;k++) { dp=0; for(di=i+p-k;di=i-k;di--) { if(u=U[di]uU[di+1]) tmpN[di][0]=1; else tmpN[di][0]=0; dp+=1; for(j=1;jdp;j++) { tul=U[di+j]-U[di]; tur=U[di+j+1]-U[di+1]; if(tul!=0) left=(u-U[di])/tul; else left=0; if(tur!=0) right=(U[di+j+1]-u)/tur; else right=0; tmpN[di][j]=left*tmpN[di][j-1]+right*tmpN[di+1][j-1]; }

文档评论(0)

dashewan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档