Nurbs中文资料

Nurbs中文资料

ID:37711066

大小:18.30 KB

页数:24页

时间:2019-05-29

Nurbs中文资料_第1页
Nurbs中文资料_第2页
Nurbs中文资料_第3页
Nurbs中文资料_第4页
Nurbs中文资料_第5页
资源描述:

《Nurbs中文资料》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、应一些网友的要求,drew在这里提供以前在学校写的非均匀有理B样条(NURBS)曲线曲面造型的主要算法函数源码,供感兴趣的朋友参考。由于这是多年前在学校所做的程序,为方便编程,坐标数据主要采用三维数组形式。当时使用计算机内存很小(好像是4M内存),所以所取控制点数有一定的限制(15个),其它未列的函数是一些数据结构,内存分配和空间转换的函数,和算法无关,可以不必考虑。由于这些源码函数是从drew的论文程序中摘录出来的,所以需要做一些修改才能使用,朋友们可以参考和修改这些算法函数,加入自己的程序。关于NURBS,曲

2、线曲面造型算法最好的中文资料,drew推荐北航施法中教授编写的《计算机辅助几何设计与非均匀有理B样条(CAGD&NURBS)》. //哈特利(Hartley)-贾德(Judd,1978)的弦长参数化算法求节点矢量U,用于由控制点正算曲线曲面//coeff:控制顶点。//v1,v2:U向,W向的节点序列。count,countj:控制点行数和列数。voidHartley_Judd(coeff,v1,v2,counti,countj)floatcoeff[15][15][3];floatv1[20],v2[20];i

3、ntcounti,countj;{   inti,s,j,k=DEGREE_J,n1=counti-1,n2=countj-1;   floatl1[20],l2[20];   floatll01,ll11,ll02,ll12;for(i=1;i<=n1;i++)   l1[i]=(float)sqrt((coeff[i][0][0]-coeff[i-1][0][0])*   (coeff[i][0][0]-coeff[i-1][0][0])+   (coeff[i][0][1]-coeff[i-1][0][1]

4、)*   (coeff[i][0][1]-coeff[i-1][0][1])+   (coeff[i][0][2]-coeff[i-1][0][2])*   (coeff[i][0][2]-coeff[i-1][0][2]));for(i=1;i<=n2;i++)   l2[i]=(float)sqrt((coeff[0][i][0]-coeff[0][i-1][0])*   (coeff[0][i][0]-coeff[0][i-1][0])+   (coeff[0][i][1]-coeff[0][i-1][1]

5、)*   (coeff[0][i][1]-coeff[0][i-1][1])+   (coeff[0][i][2]-coeff[0][i-1][2])*   (coeff[0][i][2]-coeff[0][i-1][2]));ll01=0;ll11=0;for(i=0;i<=k;i++)v1[i]=0;for(i=k+1;i<=n1+1;i++){   for(j=i-k;j<=i-1;j++)       ll01=ll01+l1[j];   for(s=k+1;s<=n1+1;s++)       for(

6、j=s-k;j<=s-1;j++)           ll11=ll11+l1[j];   v1[i]=ll01/ll11+v1[i-1];}for(i=n1+1;i<=n1+k+1;i++)v1[i]=1;if(v1[2]==1)v1[2]=0;ll02=0;ll12=0;for(i=0;i<=k;i++)v2[i]=0;for(i=k+1;i<=n2+1;i++){   for(j=i-k;j<=i-1;j++)       ll02=ll02+l2[j];   for(s=k+1;s<=n2+1;s++)

7、   for(j=s-k;j<=s-1;j++)       ll12=ll12+l2[j];   v2[i]=ll02/ll12+v2[i-1];}for(i=n2+1;i<=n2+k+1;i++)v2[i]=1;   if(v2[2]==1)v2[2]=0;}//伯姆(Boehm)节点插入算法://coeff:原控制顶点.v:原节点序列.uu:新插入节点.counti:原控制点数.d:新控制顶点voidboehm(coeff,v,uu,counti,d)floatcoeff[15][3],v[20],d[15

8、][3],uu;intcounti;{  intr=0,g=0,i,j;   floata[15],vd[20];   for(i=0;i<=counti+DEGREE_J;i++)       {  if(uu==v[i])r++;           elseif(uu>=v[i])g++;       }   g--;for(i=0;i<=g-DEGREE_J;i+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。