c语言立体图像编程,C语言-编程实例-三视图的画法

该代码段展示了如何使用C语言绘制一个三维图形的主视图、俯视图和侧视图。通过定义坐标数组dx、dy和dz以及连接顺序数组ld,程序在图形窗口中绘制线条,实现了从不同视角观察组合体的效果。函数zu()、fu()和zo()分别对应主视图、俯视图和侧视图的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

int dx[12]={0,60,60,0,0,60,60,0,60,0,60,0}; /*确定组合体X坐标*/

int dy[12]={0,0,120,120,0,0,40,40,80,80,120,120};/*确定组合体Y坐标*/

int dz[12]={0,0,0,0,80,80,80,80,40,40,40,40};/*确定组合体Z坐标*/

int ld[24]={0,1,2,3,0,4,5,6,7,4,10,11,9,8,10,2,3,11,8,6,9,7,1,5};/*确定连接各线的顺序*/

int tl[24]={0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1};

int i,j,vh=100,vw=120,x,y,x0=250,y0=200;

main()

{

int driver=DETECT,mode=0;

initgraph(&driver,&mode,"");

setbkcolor(BLUE);

setcolor(YELLOW);

zu();

fu();

zo();

fo();

getch();

closegraph();

}

zu()/*主视图*/

{

for(i=0;i<24;i )

{

j=ld[i];

x=x0-dx[j];

y=y0-dz[j];

if(tl[i]==0)

moveto(x,y);

lineto(x,y);

}

}

fu()/*俯视图*/

{

for(i=0;i<24;i )

{j=ld[i];

x=x0-dx[j];

y=y0 dy[j] vh;

if(tl[i]==0)

moveto(x,y);

lineto(x,y);

}

}

zo()/*侧视图*/

{

for(i=0;i<24;i )

{

j=ld[i];

x=x0 dy[j] vw;

y=y0-dz[j];

if(tl[i]==0)

moveto(x,y);

lineto(x,y);

}

}

fo()/*轴侧图*/

{

for(i=0;i<24;i )

{j=ld[i];

x=x0-0.7071*dx[j] 0.7071*dy[j] 150;

y=y0 0.4082*dx[j] 0.4082*dy[j]-0.8165*dz[j] 150;

if(tl[i]==0)

moveto(x,y);

lineto(x,y);

}

}

三维图形c语言编写,可以缩放图形。 /* Note:Your choice is C IDE */ #include "stdio.h" #include "graphics.h" #include "math.h" void hua(int T[8][3]) { moveto(T[0][0]/T[0][2],T[0][1]/T[0][2]); lineto(T[1][0]/T[1][2],T[1][1]/T[1][2]); lineto(T[2][0]/T[2][2],T[2][1]/T[2][2]); lineto(T[3][0]/T[3][2],T[3][1]/T[3][2]); lineto(T[0][0]/T[0][2],T[0][1]/T[0][2]); moveto(T[4][0]/T[4][2],T[4][1]/T[4][2]); lineto(T[5][0]/T[5][2],T[5][1]/T[5][2]); lineto(T[6][0]/T[6][2],T[6][1]/T[6][2]); lineto(T[7][0]/T[7][2],T[7][1]/T[7][2]); lineto(T[4][0]/T[4][2],T[4][1]/T[4][2]); moveto(T[0][0]/T[0][2],T[0][1]/T[0][2]); lineto(T[4][0]/T[4][2],T[4][1]/T[4][2]); moveto(T[1][0]/T[1][2],T[1][1]/T[1][2]); lineto(T[5][0]/T[5][2],T[5][1]/T[5][2]); moveto(T[2][0]/T[2][2],T[2][1]/T[2][2]); lineto(T[6][0]/T[6][2],T[6][1]/T[6][2]); moveto(T[3][0]/T[3][2],T[3][1]/T[3][2]); lineto(T[7][0]/T[7][2],T[7][1]/T[7][2]); } /*/////////////////////////////////////////////////////////////////////////*/ void x(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]; T[i][1]=T[i][0]*0+T[i][1]*cos(theta)+T[i][2]*(-sin(theta)); T[i][2]=T[i][0]*0+T[i][1]*sin(theta)+T[i][2]*cos(theta); } hua(T); } /*//////////////////////////////////////////////////////////////////////*/ void y(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][2]*sin(theta); T[i][1]=T[i][1]; T[i][2]=T[i][0]*(-sin(theta))+T[i][2]*cos(theta); } hua(T); } /*/////////////////////////////////////////////////////////////////////////*/ void z(int T[8][3],float af) { int i; float theta =0.00017* af; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=T[i][1]*sin(theta)+T[i][1]*cos(theta); T[i][2]=T[i][2]; } hua(T); } /*//////////////////////////////////////////////////////////////*/ void projection(int T[8][3],float af,float af1) { int i; float theta =0.017* af; float theta1 =0.017* af1; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=0; T[i][2]=T[i][0]*(-sin(theta)*sin(theta1))+T[i][1]*(-cos(theta)*sin(theta1))+T[i][2]*cos(theta1); } hua(T); } /*////////////////////////////////////////////////////////////////////*/ void perspective(int T[8][4],float af,float af1,float q) { int i; float theta =0.017* af; float theta1 =0.017* af1; for(i=0;i<8;i++) { T[i][0]=T[i][0]*cos(theta)+T[i][1]*(-sin(theta)); T[i][1]=0; T[i][2]=T[i][0]*(-sin(theta)*sin(theta1))+T[i][1]*(-cos(theta)*sin(theta1))+T[i][2]*cos(theta1); T[i][3]=T[i][0]*q*sin(theta)*cos(theta1)+T[i][1]*q*cos(theta)*cos(theta1)+T[i][2]*q*sin(theta1)+T[i][3]; } hua(T); } /*//////////////////////////////////////////////////////////////////////*/ void Zperspective(int T[8][3]) { int i; for(i=0;i<8;i++) { T[i][0]=T[i][0]*0.707+T[i][1]*(-0.707); T[i][1]=0; T[i][2]=T[i][0]*(-0.408)+T[i][1]*(-0.408)+T[i][2]*(0.816); } hua(T); } /*==============================================================================================================*/ main() { int gdriver=DETECT,gmode; int T[8][3]={530,390,1,500,420,1,560,420,1,590,390,1,530,450,1,500,480,1,560,480,1,590,450,1}; int TT[8][3]={80,50,1,50,80,1,110,80,1,140,50,1,80,110,50,140,110,140,140,110,80,110,1}; float af,af1,q; initgraph(&gdriver,&gmode,""); cleardevice(); setbkcolor(9);setcolor(4); hua(T); printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); x(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); y(T,af); /*****************************/ printf("input af:"); scanf("%f",&af); z(T,af); /*****************************/ /* printf("input af,af1:"); scanf("%f%f",&af,&af1); projection(T,af,af1); printf("input af,af1,q:"); scanf("%f%f%f",&af,&af1,&q); perspective(T,af,af1,q); Zperspective(T); */ getch(); closegraph(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值