问题描述:我是初学计算机图形学,请高手指点指点。
1)。有点组成的立体图(0,0,40)(60,5,40)(0,40,0)(0,40,40)(30,0,40)(60,5,40)(30,0,0)(60,15,0)(30,40,0)(0,40,0)(0,40,37)(0,40,18)(017,40,37)(17,40,18),画出它的正等测投影图。
用C语言描述。
2。)用B样条曲线或者贝赛尔曲线画一个简单的图形。
用C语言描述。
谢谢!
回答:给你一个程序画出贝赛尔曲线: 如下: class Curve { public void PaintCurve(Graphics g,Image buffer,Color c,int a[][],int n,int piece) { int l,n0,j,jay=1,m=1,x0,y0,xn,yn,b[][]=new int[2][1000],d[][]=new int[2][1000]; float piece1; n--; for(l=1;l<=n;l++) { d[0][l]=a[0][l]; d[1][l]=a[1][l]; } piece1=(float)(piece); n0=n;j=1; x0=a[0][1];y0=a[1][1]; xn=a[0][n];yn=a[1][n]; g.setPaintMode(); g.setColor(c); while(true) { for(l=1;l<=(n0-1)*n0/2;l++) { if(j==n){j=1;n--;} if(d[0][j]>=d[0][j+1]) { d[0][j]=(int)(0.5+d[0][j]-((float)(jay*(d[0][j]-d[0][j+1])))/piece1); d[1][j]=(int)(0.5+d[1][j]-((float)(jay*(d[1][j]-d[1][j+1])))/piece1); } else { d[0][j]=(int)(0.5+d[0][j]+((float)Math.abs((jay*(d[0][j]-d[0][j+1]))))/piece1); d[1][j]=(int)(0.5+d[1][j]-((float)(jay*(d[1][j]-d[1][j+1])))/piece1); } j++; } b[0][m]=d[0][j-1]; b[1][m]=d[1][j-1]; m++; n=n0; jay++; j=1; for(l=1;l<=n;l++) { d[0][l]=a[0][l]; d[1][l]=a[1][l]; } if(piece==1)break; if(m==piece)break; } g.drawLine(x0,y0,b[0][1],b[1][1]); if(piece!=1) { for(m=1;m<piece-1;m++) g.drawLine(b[0][m],b[1][m],b[0][m+1],b[1][m+1]);} if(piece!=1) g.drawLine(b[0][m],b[1][m],xn,yn); } } 这是一个java程序,可以稍微改一下就可以用C语言运行 |
|