我正在做一个在屏幕上显示三维立方体的程序。我正在DOSBOX中执行该程序。我的算法如下: 我把侧面的长度作为用户的输入 2.我绘制的多维数据集的初始坐标前缀为(140,280,0) 3.我使用公式x = x +(z / sqrt(6))将3-D表示转换为2-D
以下是我的代码:
#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();
}
当在屏幕上绘制图形时,我得到的是长方体而不是完美的立方体。有人可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:0)
感谢所有关注我的问题。我在程序中发现了错误。
在我输入inpmat[1][7],inpmat[2][7],inpmat[3][7]
之前,我应该做ty=ty-side
,以便y坐标移回初始位置。相反,我做了ty=ty+side
并绘制了数字。当我看到结果图形错误时,我尝试编辑代码以相应地绘制线条,而不是查看代码的上一部分。我很抱歉等你宝贵的时间。