如何建立三维图形(正方体)!

beckham7771986 2008-01-03 01:01:16
我在MFC中想建立一个立方体,不用opengl什么类库.用数组表示三维坐标如下:
int a[8][3]={
{100,100,50},
{200,100,50},
{200,200,50},
{100,200,50},
{100,100,-50},
{200,100,-50},
{200,200,-50},
{100,200,-50},
};
然后取点联线如下:
     pdc->MoveTo(a[0][0],a[0][1]);
pdc->LineTo(a[1][0],a[1][1]);
pdc->LineTo(a[2][0],a[2][1]);
pdc->LineTo(a[3][0],a[3][1]);
pdc->LineTo(a[0][0],a[0][1]);


pdc->MoveTo(a[4][0],a[4][1]);
pdc->LineTo(a[5][0],a[5][1]);
pdc->LineTo(a[6][0],a[6][1]);
pdc->LineTo(a[7][0],a[7][1]);
pdc->LineTo(a[4][0],a[4][1]);


pdc->MoveTo(a[0][1],a[0][2]);
pdc->LineTo(a[4][1],a[4][2]);

pdc->MoveTo(a[1][1],a[1][2]);
pdc->LineTo(a[5][1],a[5][2]);

pdc->MoveTo(a[2][1],a[2][2]);
pdc->LineTo(a[6][1],a[6][2]);


pdc->MoveTo(a[3][1],a[3][2]);
pdc->LineTo(a[7][1],a[7][2]);
但是,得不到所要的立方体,请问各位大侠,如何画一个立方体呢!小弟很感激!!!
...全文
465 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckham7771986 2008-01-12
  • 打赏
  • 举报
回复
void Read()
{
int flag,r,h;
double pi,x,y,z,cx,cy,thx,thy,th;
double xw,yw,zw;

pi=3.14159;
cx=320;
cy=180;
int ed=2000,eh=100,od=400,hl=1;

h=80; thy=0.2;r=100;n=4;thx=0.2;
flag=0;nn=1;

for(th=0;th<=2*pi+0.1;th+=2*pi/n)
{
x=r*cos(th); y=h; z=r*sin(th);

//Call rot_y: Call rot_x
zw=z; xw=x;
x=zw*cos(thy)-xw*sin(thy);
z=zw*sin(thy)+xw*cos(thy);

yw=y; zw=z;
y=yw*cos(thx)-zw*sin(thx);
z=yw*sin(thx)+zw*cos(thx);

if(ps==1){
x=x*ed/(ed-od-z);
y=(y*ed-eh*(od+z))/(ed-od-z);
}
//ax[nn]=x; ay[nn]=y; az[nn]=z;
XP[nn]=x; YP[nn]=y; ZP[nn]=z;
nn=nn+1;
}

flag=0;
nn=1;
for(th=0;th<=2*pi+0.1;th+=2*pi/n){
x=r*cos(th); y=-h; z=r*sin(th);

//Call rot_y: Call rot_x
zw=z; xw=x;
x=zw*cos(thy)-xw*sin(thy);
z=zw*sin(thy)+xw*cos(thy);

yw=y; zw=z;
y=yw*cos(thx)-zw*sin(thx);
z=yw*sin(thx)+zw*cos(thx);

if(ps==1){
x=x*ed/(ed-od-z);
y=(y*ed-eh*(od+z))/(ed-od-z);}
//bx[nn]=x; by[nn]=y; bz[nn]=z;
XP[nn+4]=x; YP[nn+4]=y; ZP[nn+4]=z;
nn=nn+1;
}

CP[1] = 1;CP[2] = 1;CP[3] = 1; CP[4] = 1;CP[5] = 1;CP[6] = 1;CP[7] = 1;CP[8] = 1;

}

void XCalculate(array2d B)
{ int i;
Read();
for (i = 1;i<9;i++ )
{
ax[i] =XP[i]*B[1][1]+YP[i]*B[2][1]+ZP[i]*B[3][1]+CP[i]*B[4][1];
ay[i] =XP[i]*B[1][2]+YP[i]*B[2][2]+ZP[i]*B[3][2]+CP[i]*B[4][2];
az[i] =XP[i]*B[1][3]+YP[i]*B[2][3]+ZP[i]*B[3][3]+CP[i]*B[4][3];
}

}
void CSANWEIView::OnSanwei()
{
// TODO: Add your command handler code here
CDC* pdc=GetDC();

double cx,cy;
cx=320;
cy=180;
for (int k=1;k<=4;++k)
{
for ( int j=1;j<=4;++j)
A[k][j]=0;
}
A[1][1]=1;
A[2][2]=1;
A[4][4]=1;
A[3][3]=1;
A[4][1]=6;
A[4][2]=4;
A[4][3]=4;

XCalculate(A);
for (int i = 1; i <5; i++ )
{
bx[i+4]=bx[i] =ax[i+4];
by[i+4]=by[i] =ay[i+4];
bz[i+4]=bz[i] =az[i+4];
}
for ( i = 1; i <5; i++ )
{
ax[i+4] =ax[i];
ay[i+4] =ay[i];
az[i+4] =az[i];
}

for(nn=1;nn<=n;nn++)
{
pdc->MoveTo(cx+ax[nn],cy+ay[nn]);
pdc->LineTo(cx+ax[nn],cy+ay[nn]);
pdc->LineTo(cx+ax[nn+1],cy+ay[nn+1]);
pdc->LineTo(cx+bx[nn+1],cy+by[nn+1]);
pdc->LineTo(cx+bx[nn],cy+by[nn]);
}


ReleaseDC(pdc);
}



typedef double array2d[5][5];
typedef double array[24];
double x0, z0 ,Aux1,Aux2,Aux3,Aux4,Aux5,Aux6,Aux7,Aux8;
int Theta, theta_y, phi_x, xx, yy,nn,n,ps,ed,eh,od,hl;
array X, Y, Z, C, XT, YT, ZT,XP,YP,ZP,CP;
array2d A, A1,Ah, Aw;
double ax[9],ay[9],az[9];
double bx[9],by[9],bz[9];


我想应该是这个样子的,请大家指点。谢谢!~~
superdiablo 2008-01-04
  • 打赏
  • 举报
回复
你在纸上画一个,然后用尺子量一量确定各个点的坐标,把连线画出来就行了
这个问题真幽默;-)
嵌云阁主 2008-01-03
  • 打赏
  • 举报
回复
在画图之前需要将3D坐标转换为2D坐标,看看图形学喔

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧