⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3d.txt

📁 刘洪石用C编写的编写的三维立体画生成程序。
💻 TXT
字号:
/************************************************/
/*                                              */ 
/*   三维画生成程序,我的个人主页               */
/*   http://www.liuhs.com                       */
/*   中的三维画不是用此程序生成,但原理一样     */
/*   此程序用 Turbo C 2.00 调试通过             */
/*                                              */
/*                             刘红石           */
/************************************************/

# include <stdlib.h>
# include <graphics.h>
# include <conio.h>
# include <alloc.h>

# define NO 999     /* 一个标志,指示有无对应的点*/
# define W 64       /* 重复的图案宽度 */
# define MAXX 639   /* 三维画最大宽度 */
# define MAXY 479   /* 三维画最大高度 */
# define MAXZ 7     /* 三维形象最大层数 */

int dot[MAXX+1][3];    

/* 下面数据决定看到的三维形象 */
char *hf[]={
     "11111111111111111111111111111111",
     "11111111111111111111111111111111",
     "11111111111111111111111111111111",
     "11117777777711111177777777711111",
     "11117777777771111177111111771111",
     "11111111117771111177111111771111",
     "11111111117771111177111111771111",
     "11117777777771111177111111771111",
     "11111111117771111177111111771111",
     "11111111117771111177111111771111",
     "11117777777771111177111111771111",
     "11117777777711111177777777711111",
     "11111111111111111111111111111111",
     "11111111111111111111111111111111",
     "11112233445566776655443322111111",
     "11112233445566776655443322111111",
     "11111111111111111111111111111111",
     "11111111111111111111111111111111",
     "11112223344456665443322211111111",
     "11112223344456665443322211111111",
     "10101010101010101010101010101010",
     "01010101010101010101010101010101",
     "10101010101010101010101010101010",
     "01010101010101010101010101010101"};

void main()
{
  int lx,rx,tx;
  int gd=0,gm;
  int i;
  int x,y,h;
  int *p;

  initgraph(&gd,&gm,"");         /* 初始化图形设备 */
  for(i=1;i<=8000;i++){          /* 在屏幕上画出随机的线,作为三维画的底纹 */
    setcolor(i % 8+7);
    x=random(MAXX); y=random(MAXY);
    line(x,y,x+random(7),y+random(7));
  }
  p=(int*)malloc(imagesize(0,0,19,1));  /* 分配内存,准备存放图块数据 */

 for(y=0;y<= MAXY;y+=20){               /* 从0到MAXY一行一行进行 */
    for(x=0;x<=MAXX;x++){               /* 生成平面数据 */
      dot[x][1]=NO;
      dot[x][2]=NO;
      if (x+W <= MAXX) dot[x][1]= x + W;
      if (x-W >= 0)    dot[x][2]= x - W;
    }
  for(h=1;h<=MAXZ;h++){                 /* 从1层到MAXZ层,逐层处理 */
    for(x=0;x<=MAXX;x++){
      lx = x - W /2 + h;                /* 越靠前的图层,两点的距离越近 */
      rx = x + W / 2 - h;
      if (hf[y/20][x/20]-48==h && lx >= 0 && rx <= MAXX){
	if (dot[lx][1] !=NO) dot[dot[lx][1]][2]= NO;
	dot[lx][1] = rx;
	if(dot[rx][2] != NO) dot[dot[rx][2]][1] = NO;
	dot[rx][2] = lx;
      }
    }
  }
  /* 依据前面计算得到的数据画出一行三维画 */
  for(x=0;x<=MAXX;x++){
    if(dot[x][2]==NO){
      dot[x][0] = x;
      tx = x;
      while(dot[tx][1]!=NO){
	tx = dot[tx][1];
	dot[tx][0] = x;
      }
    }
    if(dot[x][0] != x){
      getimage(dot[x][0],y,dot[x][0],y+19,p);
      putimage(x,y,p,0);
    }
  }
 }
 getch();             /* 等待按键 */
 closegraph();        /* 关闭图形设备 */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -