我正在做一个程序来在屏幕上显示一个三维立方体。我正在做DOSBOX中的程序。我的算法如下: 1. 我将边的长度作为用户的输入 2. 我绘制初始坐标为 (140,280,0) 的立方体 3. 我将 3-D 表示转换为 2-D通过使用公式 x=x+(z/sqrt(6))
以下是我的代码:
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float idmat[4][4],inpmat[4][8];
void main()
{
int gd=DETECT,gm;
float s,temz,sqp,tx1,ty1,tz1;
int i,tz,j,side,d2mat[3][8],tx,ty;
for(i=1;i<=4;i++)
{for(j=1;j<=4;j++)
idmat[i][j]=0;
}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
{if(i==j)
{
idmat[i][j]=1;
}
}}
printf("Enter the side of the cube\n");
scanf("%d",&side);
inpmat[1][1]=140;
inpmat[2][1]=280;
inpmat[3][1]=0;
tx=140;
ty=280;
tz=0;
tx=tx+side;
inpmat[1][2]=tx;
inpmat[2][2]=ty;
inpmat[3][2]=tz;
ty=ty+side;
inpmat[1][3]=tx;
inpmat[2][3]=ty;
inpmat[3][3]=0;
tx=inpmat[1][1];
inpmat[1][4]=tx;
inpmat[2][4]=ty;
inpmat[3][4]=tz;
tz=tz+side;
printf("tz is %d ",tz);
inpmat[1][5]=tx;
inpmat[2][5]=ty;
inpmat[3][5]=tz;
tx=tx+side;
inpmat[1][6]=tx;
inpmat[2][6]=ty;
inpmat[3][6]=tz;
ty=ty+side;
inpmat[1][7]=tx;
inpmat[2][7]=ty;
inpmat[3][7]=tz;
tx=inpmat[1][1];
inpmat[1][8]=tx;
inpmat[2][8]=ty;
inpmat[3][8]=tz;
for(i=1;i<=8;i++)
inpmat[4][i]=1;
sqp=sqrt(6);
printf("The sqrt is %f \n",sqp);
for(i=1;i<=8;i++)
{
tx1=inpmat[1][i];
printf("%f ",inpmat[1][i]);
ty1=inpmat[2][i];
printf("%f lala\n ",inpmat[3][i]);
tz1=inpmat[3][i];
printf("prr %f \n",tz1);
temz=tz1/sqrt(6);
printf("temz is %f \n",temz);
tx1=tx1+temz;
ty1=ty1+temz;
d2mat[1][i]=tx1;
// printf("%f ",d2mat[1][i]);
d2mat[2][i]=ty1;
// printf("%f ",d2mat[2][i]);
d2mat[3][i]=1;
// printf("%f \n",d2mat[3][i]);
}
initgraph(&gd,&gm,"C:\\TurboC3\\BGI\\");
line(d2mat[1][1],d2mat[2][1],d2mat[1][2],d2mat[2][2]);
line(d2mat[1][2],d2mat[2][2],d2mat[1][3],d2mat[2][3]);
line(d2mat[1][3],d2mat[2][3],d2mat[1][4],d2mat[2][4]);
line(d2mat[1][4],d2mat[2][4],d2mat[1][1],d2mat[2][1]);
//printf("%f %f %f %f ",inpmat[1][4],inpmat[2][4],inpmat[1][6],inpmat[2][6]);
line(d2mat[1][5],d2mat[2][5],d2mat[1][6],d2mat[2][6]);
line(d2mat[1][6],d2mat[2][6],d2mat[1][7],d2mat[2][7]);
line(d2mat[1][7],d2mat[2][7],d2mat[1][8],d2mat[2][8]);
line(d2mat[1][8],d2mat[2][8],d2mat[1][5],d2mat[2][5]);
line(d2mat[1][5],d2mat[2][5],d2mat[1][1],d2mat[2][1]);
line(d2mat[1][6],d2mat[2][6],d2mat[1][2],d2mat[2][2]);
line(d2mat[1][8],d2mat[2][8],d2mat[1][4],d2mat[2][4]);
line(d2mat[1][7],d2mat[2][7],d2mat[1][3],d2mat[2][3]);
getch();
//closegraph();
//restorecrtmode();
}
当图形绘制在屏幕上时,我得到的是一个长方体而不是一个完美的立方体。有人可以帮我解决这种情况吗?提前致谢。