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

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]);
但是,得不到所要的立方体,请问各位大侠,如何画一个立方体呢!小弟很感激!!!
...全文
478 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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坐标,看看图形学喔
资源下载链接为: https://pan.quark.cn/s/0c983733fad2 计算机图学是信息技术领域的重要分支,专注于研究图在计算机中的表示、处理与显示。本资源聚焦于二维图变换,尤其是正方体的平移、缩放和旋转操作。这些变换在游戏开发、用户界面设计、工程绘图等众多领域有着广泛的应用。 MFC(Microsoft Foundation Classes)是微软推出的一套面向对象的类库,用于构建Windows应用程序。它封装了Windows API,让开发者能够更便捷地使用C++进行Windows编程。在本项目中,MFC被用于构建图用户界面,接收键盘输入,并根据输入执行图变换操作。二维图变换主要包括平移、缩放和旋转。平移是图在坐标系中位置的变化,不会改变图状和大小;缩放是改变图尺寸的操作,可以沿X轴、Y轴或同时沿两轴进行;旋转则是围绕一个固定点(旋转中心)改变图的方向。虽然在二维视图中正方体仅呈现为矩投影,但其变换操作仍遵循三维空间规则。 在C++编程中,实现这些变换通常依赖于矩阵运算。二维图变换可以通过2x2矩阵表示,通过矩阵乘法来应用变换。例如,平移通过添加平移向量实现,缩放通过乘以缩放因子完成,而旋转则涉及复数和欧拉角。在Visual Studio开发环境中,可以借助OpenGL或Direct2D等图库实现硬件加速的图渲染,从而提升性能。在本项目中,开发者可能利用键盘事件处理函数捕捉按键输入,然后根据按键指令更新变换矩阵。比如,按下上箭头键可能使正方体向上平移,按住Ctrl键并滚动鼠标滚轮可能实现缩放,左右箭头键则可能控制正方体的旋转。为了在屏幕上显示变换后的图,开发者需要将变换矩阵应用于正方体每个顶点的坐标,然后绘制更新后的图。 这个资源涵盖了计算机图学中的基本概念,如二维图变换和MFC的应用。通过实际操作,学习者可以更

19,472

社区成员

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

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