• 模拟3d


      1 #include <graphics.h> 
      2 #include <conio.h>
      3 #include <time.h>
      4 #include <math.h>
      5 
      6 #define maxp 10000
      7 #define end 1000.0
      8 #define T 0
      9 #define space 3.0
     10 #define change 2.0
     11 #define beginning 450.0
     12 
     13 struct ddd{
     14     double x;
     15     double y;
     16     double z;
     17     COLORREF color;
     18 };
     19 
     20 ddd a[maxp],q;
     21 double f;
     22 int cnt = 0,get;
     23 
     24 void print(ddd p){
     25     f = (end - p.z) / (end - q.z);
     26     putpixel((p.x - q.x) * f,(p.y - q.y) * f,p.color);
     27 }
     28 
     29 double len(ddd aa,ddd bb){
     30     return sqrt((aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y)+(aa.z-bb.z)*(aa.z-bb.z)) - 150.0;
     31 }
     32 
     33 void lll(int xx,int yy,int zz,int xxx,int yyy,int zzz){
     34     int pp;
     35     if(xx != xxx){
     36         for(pp = xx;pp <= xxx;pp += space){
     37             cnt++;
     38             a[cnt].x = pp * 1.0;
     39             a[cnt].y = yy * 1.0;
     40             a[cnt].z = zz * 1.0;
     41         }
     42         return;
     43     }
     44     if(yy != yyy){
     45         for(pp = yy;pp <= yyy;pp += space){
     46             cnt++;
     47             a[cnt].x = xx * 1.0;
     48             a[cnt].y = pp * 1.0;
     49             a[cnt].z = zz * 1.0;
     50         }
     51         return;
     52     }
     53     if(zz != zzz){
     54         for(pp = zz;pp <= zzz;pp += space){
     55             cnt++;
     56             a[cnt].x = xx * 1.0;
     57             a[cnt].y = yy * 1.0;
     58             a[cnt].z = pp * 1.0;
     59         }
     60         return;
     61     }
     62 }
     63 
     64 void main()
     65 {
     66     
     67     initgraph(1000, 1000, NOMINIMIZE);   // ÕâÀïºÍ TC ÂÔÓÐÇø±ð
     68 
     69     setorigin(500,500);
     70 
     71     setbkcolor(WHITE);
     72     
     73     srand(time(NULL));
     74     
     75     q.x = 100.0;
     76     q.y = 70.0;
     77     q.z = 10.0;
     78     
     79     /*
     80     for(int f = 0;f < maxp;f++){
     81         a[f].x = rand() % 100 + 50;
     82         a[f].y = rand() % 100 + 20;
     83         a[f].z = rand() % 100 + 200;
     84     }
     85     */
     86     lll(50,20,200,50,120,200);    //
     87     lll(50,20,200,150,20,200);    //
     88     lll(50,20,200,50,120,300);    //
     89     lll(50,20,300,50,120,300);    //
     90     lll(50,120,200,50,120,300);    //
     91     lll(50,120,200,150,120,200);    //
     92     lll(150,20,200,150,120,200);    //    
     93     lll(50,120,300,150,120,300);    //
     94     lll(150,120,200,150,120,300);    //
     95     lll(50,20,300,150,20,300);        
     96     lll(150,20,200,150,20,300);  
     97     lll(150,20,300,150,120,300);  
     98     
     99     lll(0,0,0,0,0,100);
    100     lll(0,0,0,0,200,0);
    101     lll(0,0,0,300,0,0);
    102     /*
    103     for(int ii = 0;ii <= maxp;ii++){
    104         if(a[ii].x >= 145){
    105             a[ii].color = LIGHTRED;
    106         }
    107         if(a[ii].y >= 115){
    108             a[ii].color = LIGHTRED;
    109         }
    110         if(a[ii].z >= 295){
    111             a[ii].color = LIGHTRED;
    112         }
    113         
    114         if(a[ii].x <= 55){
    115             a[ii].color = LIGHTRED;
    116         }
    117         if(a[ii].y <= 25){
    118             a[ii].color = LIGHTRED;
    119         }
    120         if(a[ii].z <= 205){
    121             a[ii].color = LIGHTRED;
    122         }
    123         
    124     }
    125     */
    126 
    127     for(int i = 0;i < cnt;i++){
    128         a[i].color = RGB(len(a[i],q) / change,len(a[i],q) / change,len(a[i],q) / change);
    129     }
    130 
    131     while(1){
    132         /*
    133         for(;;){
    134             q.x += 1;
    135             cleardevice();
    136             for(int k = 0;k < maxp;k++){
    137                 print(a[k]);
    138             }
    139             Sleep(T);
    140         }
    141         */
    142         cleardevice();
    143         for(int k = 0;k < maxp;k++){
    144             print(a[k]);
    145         }
    146         Sleep(T);
    147         get = getch();
    148         if(get == 0x48)q.y += 10;
    149         if(get == 0x50)q.y -= 10;
    150         if(get == 0x4b)q.x -= 10;
    151         if(get == 0x4d)q.x += 10;
    152         if(get == 0x77)q.z += 10;
    153         if(get == 0x73)q.z -= 10;
    154         if(get == 0x1b)return;
    155     }
    156     
    157     getch();
    158     closegraph();        
    159     
    160 }

     在easyx环境下编译。。。

    键盘上下左右控制。

  • 相关阅读:
    诸葛亮会议
    软件工程第十次作业——例行报告
    Beta阶段中间产物
    Beta冲刺贡献分数分配结果
    “Hello World!”团队第六周的第六次会议
    “Hello World!”团队第六周的第五次会议
    Beta发布文案+美工
    “Hello World!团队”Beta发布—视频链接+文案+美工
    软件工程第九次作业——例行报告
    “Hello World!”团队第五周第五次会议
  • 原文地址:https://www.cnblogs.com/frankying/p/6613143.html
Copyright © 2020-2023  润新知