18-自由网格曲面的生成_第1页
18-自由网格曲面的生成_第2页
18-自由网格曲面的生成_第3页
18-自由网格曲面的生成_第4页
18-自由网格曲面的生成_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1自由网格曲面的绘制内容大纲1双线性曲面2单线性曲面3Bezier曲面4B样条曲面已知任意4个角点的坐标值x(u,v)=x00(1-u)(1-v)+x01(1-u)v+x10(1-v)u+x11uv

y(u,v)=y00

(1-u)(1-v)+y01(1-u)v+y10(1-v)u+y11uvz(u,v)=z00

(1-u)(1-v)+z01(1-u)v+z10(1-v)u+y11uv

(x01,y01)(x00,y00)(x10,y10)(x11,y11)(0≤u≤1,0≤v≤1)u=0,v=0~1

u=0,v=0u=1,v=0u=0,v=1u=1,v=1u=0.2,v=0~1

……u=1,v=0~1

v=0,u=0~1

v=0.2,u=0~1

……v=1,u=0~1

1双线性曲面双线性曲面就是两簇直线段的叠加曲面1双线性曲面voidDoubleLinear(CDC*pDC,intX[2][2],intY[2][2],intZ[2][2],floatdu,floatdv,floatcx,floatcy,floatcz,intdx,intdy,intdz,COLORREFcolor){floatU[4],V[4],x[5],y[5],z[5],xx[5],yy[5],zz[5];for(floatu=0;u<=1.0001;u=u+du)for(floatv=0;v<=1.0001;v=v+dv){U[0]=u,V[0]=v,U[1]=u+du,V[1]=v,U[2]=u+du,V[2]=v+dv,U[3]=u,V[3]=v+dv;for(inti=0;i<4;i++){x[i]=X[0][0]*(1-U[i])*(1-U[i])+X[0][1]*(1-U[i])*U[i]+X[1][0]*(1-U[i])*U[i]+X[1][1]*U[i]*U[i];y[i]=Y[0][0]*(1-U[i])*(1-U[i])+Y[0][1]*(1-U[i])*U[i]+Y[1][0]*(1-U[i])*U[i]+Y[1][1]*U[i]*U[i];z[i]=Z[0][0]*(1-U[i])*(1-U[i])+Z[0][1]*(1-U[i])*U[i]+Z[1][0]*(1-U[i])*U[i]+Z[1][1]*U[i]*U[i];RevolveX(cx,x[i],y[i],z[i],xx[i],yy[i],zz[i]);//绕X轴旋转

RevolveY(cy,xx[i],yy[i],zz[i],x[i],y[i],z[i]);//绕Y轴旋转

RevolveZ(cz,x[i],y[i],z[i],xx[i],yy[i],zz[i]);//绕Z轴旋转

xx[i]=xx[i]+dx,yy[i]=yy[i]+dy,zz[i]=zz[i]+dz;//加上平移量}xx[4]=xx[0],yy[4]=yy[0];//封闭小四边形

for(i=0;i<4;i++) Line_DDA(pDC,xx[i],yy[i],xx[i+1],yy[i+1],color);//绘制小四边形

}}1双线性曲面x(u,v)=(1-v)fx(u)+vgx(u)y(u,v)=(1-v)fy(u)+vgy(u)z(u,v)=(1-v)fz(u)+vgz(u)v:

[0,1]u:

[u1,u2]关于v是线性,关于u是非线性。f(u)、g(u)是空间中任意的两条曲线。x(u,v)=(1-v)(400u+30)+

v300uy(u,v)=(1-v)(40sin(3

u)+100)+v30sin(4

u+3)z(u,v)=0f(u)g(u)2单线性曲面v=0.5也称直纹面v=1v=0v=0.25v=0.75u=0u=0.2u=0.4u=0.6u=0.8u=12单线性曲面voidSingerLinear(CDC*pDC,float(*fx)(floatu),float(*fy)(float),float(*fz)(float),float(*gx)(float),float(*gy)(float),float(*gz)(float),floatdu,floatdv,floatcx,floatcy,floatcz,intdx,intdy,intdz,COLORREFcolor){floatU[4],V[4],x[5],y[5],z[5],xx[5],yy[5],zz[5];for(floatu=0;u<=1.0001;u=u+du)for(floatv=0;v<=1.0001;v=v+dv){U[0]=u,V[0]=v,U[1]=u+du,V[1]=v,U[2]=u+du,V[2]=v+dv,U[3]=u,V[3]=v+dv;for(inti=0;i<4;i++){x[i]=

(1-U[i])*(*)fx(U[i])+V[i]*(*)gx(U[i]);y[i]=(1-U[i])*(*)fy(U[i])+V[i]*(*)gy(U[i]);z[i]=(1-U[i])*(*)fz(U[i])+V[i]*(*)gz(U[i]);//计算曲面上的点RevolveX(cx,x[i],y[i],z[i],xx[i],yy[i],zz[i]);//绕X轴旋转

RevolveY(cy,xx[i],yy[i],zz[i],x[i],y[i],z[i]);//绕Y轴旋转

RevolveZ(cz,x[i],y[i],z[i],xx[i],yy[i],zz[i]);//绕Z轴旋转

xx[i]=xx[i]+dx,yy[i]=yy[i]+dy,zz[i]=zz[i]+dz;}//加上平移量xx[4]=xx[0],yy[4]=yy[0];//封闭小四边形

for(i=0;i<4;i++) Line_DDA(pDC,xx[i],yy[i],xx[i+1],yy[i+1],color);//绘制小四边形

}}2单线性曲面

x(u,v)=400u+100v+100y(u,v)=30sin(4

u)+100v+100z(u,v)=

02单线性曲面柱面Bezier曲面由控制多面体控制p(u,v)=

u,v∈[0,1]3Bezier曲面

在双三次Bezier曲面中,

需给定的16个顶点。

4个角点p00、p03、p30

和p33在曲面上。

其余顶点均不在曲面上。3Bezier曲面floatB(inti,intn,floatt){intk;floatt1=1,t2=1,h;for(k=i+1;k<=n;k++)t1=t1*k;for(k=1;k<=n-i;k++)t2=t2*k;h=t1/t2;for(k=1;k<=i;k++)h=h*t;for(k=1;k<=n-i;k++)h=h*(1-t);returnh;}基函数的程序设计3Bezier曲面voidBezierFace(CDC*pDC,intX[10][10],intY[10][10],intZ[10][10],intm,intn,floatdu,floatdv,fintdx,intdy,COLORREFcolor){floatU[4],V[4],x[5],y[5],z[5],b1,b2;for(floatu=0;u<=1;u=u+du)

for(floatv=0;v<=1.;v=v+dv)

{U[0]=u,V[0]=v,U[1]=u+du,V[1]=v,U[2]=u+du,V[2]=v+dv,U[3]=u,V[3]=v+dv;

for(intk=0;k<4;k++){x[k]=0,y[k]=0,z[k]=0;for(inti=0;i<=m;i++)for(intj=0;j<=n;j++) {b1=B(i,m,U[k]),b2=B(j,n,V[k]);

x[k]=x[k]+X[i][j]*b1*b2;y[k]=y[k]+Y[i][j]*b1*b2;z[k]=z[k]+Z[i][j]*b1*b2;}}x[4]=x[0],y[4]=y[0];

for(k=0;k<4;k++)Line_DDA(pDC,x[k]+dx,y[k]+dy,x[k+1]+dx,y[k+1]+dy,color);}}3Bezier曲面3Bezier曲面intx[5][4]={60,150,230,300,80,180,260,330,120,230,280,350,180,280,330,380,220,320,350,440},y[5][4]={180,140,140,190,120,50,60,110,50,20,30,70,80,40,50,80,40,10,20,50},z[5][4]={0,0,0,0,50,50,50,50,100,100,100,100,200,200,200,200,250,250,250,250};CDC*p=GetDC();BezierFace(p,x,y,z,4,3,0.05,0.05,100,100,RGB(0,0,0));3Bezier曲面4B样条曲面(1)均匀周期二次B样条曲面N0(t)=(1-t)2/2N1(t)=

(-2t2+2t+1)/2N2(t)=t2/20

<=t<=1,i=0,1,2,……m-2,j=0,1,2,……n-2,4B样条曲面在二次B样条曲面的其中一个面片中,面片的四个顶点分别是四个四边形的中心点。二次B样条基函数的程序设计floatN2(intn,floatt){if(n==0)return((1-t)*(1-t)/2);elseif(n==1)return((-2*t*t+2*t+1)/2);elseif(n==2)return(t*t/2);}4B样条曲面voidBFace2(CDC*pDC,intX[50][50],intY[50][50],intZ[50][50],intm,intn,floatdu,floatdv,intdx,intdy,COLORREFcolor){floatU[4],V[4],x[5],y[5],z[5];for(inti=0;i<m-1;i++)for(intj=0;j<n-1;j++)for(floatu=0;u<=1.0001;u=u+du)

for(floatv=0;v<=1.0001;v=v+dv)

{U[0]=u,V[0]=v,U[1]=u+du,V[1]=v,U[2]=u+du,V[2]=v+dv,U[3]=u,V[3]=v+dv;

for(intk=0;k<4;k++){x[k]=0,y[k]=0,z[k]=0;for(ints=0;s<=2;s++)for(intt=0;t<=2;t++) {x[k]=x[k]+X[i+s][j+t]*N2(s,U[k])*N2(t,V[k]),y[k]=y[k]+Y[i+s][j+t]*N2(s,U[k])*N2(t,V[k]),z[k]=z[k]+Z[i+s][j+t]*N2(s,U[k])*N2(t,V[k]);}}x[4]=x[0],y[4]=y[0];

for(k=0;k<4;k++)Line_DDA(pDC,x[k]+dx,y[k]+dy,x[k+1]+dx,y[k+1]+dy,color);}}4B样条曲面intx[5][4]={60,150,230,300,80,180,260,330,120,230,280,350,180,280,330,380,220,320,350,440},y[5][4]={180,140,140,190,120,50,60,110,50,20,30,70,80,40,50,80,40,10,20,50},z[5][4]={0,0,0,0,50,50,50,50,100,100,100,100,200,200,200,200,250,250,250,250};CDC*p=GetDC();BFace2(p,x,y,z,4,3,0.2,0.2,100,100,RGB(0,0,0));4B样条曲面4B样条曲面(2)均匀周期三次B样条曲面N0(t)=(-t3+3t2-3t+1)/6N1(t)=(3t3-6t2+4)/60

<=t<=1,i=0,1,2,……m-3,j=0,1,2,……n-3N2(t)=(-3t3+3t2+3t+1)/6N3(t)=t3/6三次B样条基函数的程序设计floatN3(intn,floatt){if(n==0)return((-t*t*t+3*t*t-3*t+1)/6);elseif(n==1)return((3*t*t*t-6*t*t+4)/6);elseif(n==2)return((-3*t*t*t+3*t*t+3*t+1)/6);elseif(n==3)return(t*t*t/6);}4B样条曲面voidBFace3(CDC*pDC,intX[50][50],intY[50][50],intZ[50][50],intm,intn,floatdu,floatdv,intdx,intdy,COLORREFcolor){floatU[4],V[4],x[5],y[5],z[5];

for(inti=0;i<m-2;i++)for(intj=0;j<n-2;j++)for(floatu=0;u<=1.0001;u=u+du)

for(floatv=0;v<=1.0001;v=v+dv)

{U[0]=u,V[0]=v,U[1]=u+du,V[1]=v,U[2]=u+du,V[2]=v+dv,U[3]=u,V[3]=v+dv;

for(intk=0;k<4;k++){x[k]=0,y[k]=0,z[k]=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论