3dgraphics-xiaoying.c

来自「在TC20环境下实现消影的生成程序」· C语言 代码 · 共 3,015 行 · 第 1/5 页

C
3,015
字号
       X = B1.x; Y = j;Z = B1.z; k = Z;
    }


    X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0 + 30;/* 画窗*/
    j = Y; k = Z;
    while(j>=((B5.y + B6.y)/2.0 - 30))
    {
       while(k >= (B5.z + B1.z)/2.0 - 30)
       {
          Point3D_2D(&X,&Y,&Z,qx,qy,qz);
          putpixel(X,Y,15);
          k--;
          X = B1.x;Y = j;Z = k;
       }
       j--;
       X = B5.x; Y = j;Z = (B5.z + B1.z)/2.0 + 30;k = Z;
    }



    X = B5.x; Y = (B5.y+B6.y)/2.0+30; Z = (B5.z + B1.z)/2.0 + 30;/* 窗框 */
    k = Z;                                                    /* 三条竖线*/
    while(k>=(B5.z + B1.z)/2.0 - 30)
    {
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
         putpixel(X,Y,4);
         k--;
         X = B5.x; Y = (B5.y+B6.y)/2.0+30; Z = k;
    }


    X = B5.x; Y = (B5.y+B6.y)/2.0; Z = (B5.z + B1.z)/2.0 + 30;
    k = Z;
    while(k>=(B5.z + B1.z)/2.0 - 30)
    {
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
         putpixel(X,Y,4);
         k--;
         X = B5.x; Y = (B5.y+B6.y)/2.0; Z = k;
    }


    X = B5.x; Y = (B5.y+B6.y)/2.0-30; Z = (B5.z + B1.z)/2.0 + 30;
    k = Z;
    while(k>=(B5.z + B1.z)/2.0 - 30)
    {
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
         putpixel(X,Y,4);
         k--;
         X = B5.x; Y = (B5.y+B6.y)/2.0-30; Z = k;
    }


    X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0+30; /* 框的两条横线*/
    j = Y;
    while(j>=(B5.y+B6.y)/2.0 - 30)
    {
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
         putpixel(X,Y,4);
         j--;
         X = B5.x; Y = j; Z = (B5.z + B1.z)/2.0+30;
    }

    X = B5.x; Y = (B5.y+B6.y)/2.0 + 30; Z = (B5.z + B1.z)/2.0-30;
    j = Y;
    while(j>=(B5.y+B6.y)/2.0 - 30)
    {
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
         putpixel(X,Y,4);
         j--;
         X = B5.x; Y = j; Z = (B5.z + B1.z)/2.0-30;
    }


    Cft1.A.x = B5.x+15;       /* 窗的台板 */
    Cft1.A.y = (B5.y+B6.y)/2.0;
    Cft1.A.z = ((B5.z + B1.z)/2.0) + 30;
    Cft1.a = 60;
    Cft1.b = 30;
    Cft1.h = 5;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);


    X = (B5.x + B8.x)/2.0 + 50; Y = B5.y; Z = B5.z;/*  画门*/
    i = X; k = Z;
    while(i>=((B5.x + B8.x)/2.0 - 50))
    {
       while(k >= B5.z - 100)
       {
          Point3D_2D(&X,&Y,&Z,qx,qy,qz);
          putpixel(X,Y,15);
          k--;
          X = i;Y = B5.y;Z = k;
       }
       i--;
       X = i; Y = B5.y;Z = B5.z;k = Z;
    }


    Cft1.A.x = (B5.x + B8.x)/2.0 + 50;
    Cft1.A.y = B5.y-25;
    Cft1.A.z = B5.z-50;
    Cft1.a = 50;
    Cft1.b = 5;
    Cft1.h = 100;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);

    Cft1.A.x = (B5.x + B8.x)/2.0 - 50;
    Cft1.A.y = B5.y-25;
    Cft1.A.z = B5.z-50;
    Cft1.a = 50;
    Cft1.b = 5;
    Cft1.h = 100;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);


    T1.x = ((B5.x + B8.x)/2.0 - 50);T1.y = B5.y;T1.z = B5.z; /*画路1*/
    T2.x = ((B5.x + B8.x)/2.0 + 50);T2.y = B5.y;T2.z = B5.z;
    i = T1.x; j = B5.y-100;
    while(j > B5.y-160)
    {
      while(i<=T2.x)
      {
       X = i; Y = j; Z = T1.z;
           Point3D_2D(&X,&Y,&Z,qx,qy,qz);
           putpixel(X,Y,7);
       i++;

       }
       j--;  i = T1.x;

    }


    T1.x = ((B5.x + B8.x)/2.0 + 50);T1.y = B5.y-160;T1.z = B5.z; /*画路2*/
    T2.x = ((B5.x + B8.x)/2.0 + 50);T2.y = B5.y-660;T2.z = B5.z;
    i = B5.x+800; j = T1.y;
    while(i >=B8.x-800)
    {
      while(j>=T2.y)
      {
       X = i; Y = j; Z = T1.z;
           Point3D_2D(&X,&Y,&Z,qx,qy,qz);
           putpixel(X,Y,7);
       j--;

       }
       i--;  j = T1.y;

    }

    T1.x = ((B5.x + B8.x)/2.0 + 50);T1.y = B5.y-400;T1.z = B5.z; /*对路2的美化*/
    T2.x = ((B5.x + B8.x)/2.0 + 50);T2.y = B5.y-420;T2.z = B5.z;
    i = B5.x+800; j = T1.y;
    for(k = B5.x+800; k>=B8.x-800;)
    {
      i = k;
      while(i >=k-60)
      {
        while(j>=T2.y)
        {
           X = i; Y = j; Z = T1.z;
           Point3D_2D(&X,&Y,&Z,qx,qy,qz);
           putpixel(X,Y,6);
           j--;

        }
         i--;  j = T1.y;

      }
      k = k - 100;

    }


    Cft1.A.x = B1.x-10;                     /*   柱子*/
    Cft1.A.y = C1.y+20;
    Cft1.A.z = C1.z - h/2.0;
    Cft1.a = 15;
    Cft1.b = 15;
    Cft1.h = h;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);

    Cft1.A.x = B4.x+10;                     /*   柱子*/
    Cft1.A.y = C4.y+20;
    Cft1.A.z = C4.z - h/2.0;
    Cft1.a = 15;
    Cft1.b = 15;
    Cft1.h = h;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);


    T1.x = A.x; T1.y = A.y-40; T1.z = A.z - h/2.0;

    r = a +250;

    SLZU3D(T1,r,b+100,qx,qy,qz);  /* 房顶,三棱柱 */


    Cft1.A.x = A.x;                     /*   屋脊 */
    Cft1.A.y = A.y-40;
    Cft1.A.z = A.z - h/2.0-r*(1.0/5.0);
    Cft1.a = 10;
    Cft1.b = b + 100;
    Cft1.h = 10;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);

}


void My3DGraphics_B(Point3D A,float qx,float qy,float qz)
{
   int X,Y,Z;
   CFT Cft1,Cft2,Cft3,Cft4,Cft5,Cft6;
   Point3D D1,D2,T;
   Point B1,B2;
   int a,b,i,j,k;

   setbkcolor(2);


   a = 400; b = 800;

   Rect_3D(A,a,b,15,qx,qy,qz);
   Rect_3D(A,a - 10,b - 10,6,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 65; D2.z = A.z;  /*凳子下的地板*/
   Rect_3D(D2,90,250,8,qx,qy,qz);

                                                              /*  画凳子 */
   D2.x = A.x + 75; D2.y = A.y + a/2.0 + 50; D2.z = A.z - 20;  /* 四个脚 */
   Cft3D(D2,10,10,30,qx,qy,qz);

   D2.x = A.x + 75; D2.y = A.y + a/2.0 + 80; D2.z = A.z - 20;
   Cft3D(D2,10,10,30,qx,qy,qz);

   D2.x = A.x - 75; D2.y = A.y + a/2.0 + 50; D2.z = A.z - 20;
   Cft3D(D2,10,10,30,qx,qy,qz);

   D2.x = A.x - 75; D2.y = A.y + a/2.0 + 80; D2.z = A.z - 20;
   Cft3D(D2,10,10,30,qx,qy,qz);

   D2.x = A.x - 75; D2.y = A.y + a/2.0 + 65; D2.z = A.z - 30;  /*上面的条木*/
   Cft3D(D2,60,10,10,qx,qy,qz);

   D2.x = A.x + 75; D2.y = A.y + a/2.0 + 65; D2.z = A.z - 30;
   Cft3D(D2,60,10,10,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 40; D2.z = A.z - 30;
   Cft3D(D2,5,190,5,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 55; D2.z = A.z - 30;
   Cft3D(D2,5,190,5,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 70; D2.z = A.z - 30;
   Cft3D(D2,5,190,5,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 85; D2.z = A.z - 30;
   Cft3D(D2,5,190,5,qx,qy,qz);

   D2.x = A.x; D2.y = A.y + a/2.0 + 100; D2.z = A.z - 30;
   Cft3D(D2,5,190,5,qx,qy,qz);

   Rect_3D(A,a,5,15,qx,qy,qz); /* 中间的一条横线*/

   k = 80;

   while(k>=75)  /* 中间的圆 */
   {
     Yuan_3D(A,k,15,qx,qy,qz);
     k--;
   }

   D2.x = A.x + b/4.0; D2.y = A.y; D2.z = A.z;/* 篮筐1下的的三分线及其斜线 */
   k = 70;
   while(k>=65)
   {
      Yuan_3D(D2,k,15,qx,qy,qz);
      k--;
   }
   D2.x = A.x + b/4.0 + 35; D2.y = A.y; D2.z = A.z;
   Rect_3D(D2,200,70,6,qx,qy,qz);

   D2.x = A.x + 3 * b/8.0; D2.y = A.y - 85; D2.z = A.z;  /* 斜线 */
   Rect_3D_XuanZhuan(D2,5,b/4.0 + 10,15,-10,D2,3,qx,qy,qz);


   D2.x = A.x + 3 * b/8.0; D2.y = A.y + 85; D2.z = A.z;  /* 斜线 */
   Rect_3D_XuanZhuan(D2,5,b/4.0 + 10,15,10,D2,3,qx,qy,qz);



   D2.x = A.x + b/4.0; D2.y = A.y; D2.z = A.z;  /* 篮筐1下的圆 */
   k = 50;
   while(k>=45)
   {
      Yuan_3D(D2,k,15,qx,qy,qz);
      k--;
   }
  Rect_3D(D2,100,5,15,qx,qy,qz);




   D1.x = A.x + b/2.0 - 80; D1.y = A.y; D1.z = A.z - 200;
   k = 20;
   while(k>=17)        /* 篮筐1 */
   {
      Yuan_3D(D1,k,14,qx,qy,qz);
      k--;
   }


    Cft1.A.x = D1.x + 30;     /* 篮框1处接柱1 */
    Cft1.A.y = D1.y;
    Cft1.A.z = D1.z-5;
    Cft1.a = 10;
    Cft1.b = 15;
    Cft1.h = 10;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);


    Cft2.A.x = D1.x + 40;   /* 篮板1 */
    Cft2.A.y = D1.y;
    Cft2.A.z = D1.z;
    Cft2.a = 80;
    Cft2.b = 10;
    Cft2.h = 80;
    Cft3D(Cft2.A,Cft2.a,Cft2.b,Cft2.h,qx,qy,qz);

    Cft3.A.x = D1.x + 50;    /* 篮板1的支架 */
    Cft3.A.y = D1.y;
    Cft3.A.z = D1.z + 100;
    Cft3.a = 10;
    Cft3.b = 10;
    Cft3.h = 200;
    Cft3D(Cft3.A,Cft3.a,Cft3.b,Cft3.h,qx,qy,qz);



    Cft4.A.x = A.x - b/2.0 + 30;            /*篮板2的支架*/
    Cft4.A.y = D1.y;
    Cft4.A.z = D1.z + 100;
    Cft4.a = 10;
    Cft4.b = 10;
    Cft4.h = 200;
    Cft3D(Cft4.A,Cft4.a,Cft4.b,Cft4.h,qx,qy,qz);

    Cft2.A.x = A.x - b/2.0 + 40;   /* 篮板2 */
    Cft2.A.y = D1.y;
    Cft2.A.z = D1.z;
    Cft2.a = 80;
    Cft2.b = 10;
    Cft2.h = 80;
    Cft3D(Cft2.A,Cft2.a,Cft2.b,Cft2.h,qx,qy,qz);


    Cft1.A.x = A.x - b/2.0 + 50;     /* 篮框2处接柱1 */
    Cft1.A.y = D1.y;
    Cft1.A.z = D1.z-5;
    Cft1.a = 10;
    Cft1.b = 15;
    Cft1.h = 10;
    Cft3D(Cft1.A,Cft1.a,Cft1.b,Cft1.h,qx,qy,qz);



   D1.x = A.x - b/2.0 + 80; D1.y = A.y; D1.z = A.z - 205; /* 篮筐2 */
   k = 20;
   while(k>=17)
   {
      Yuan_3D(D1,k,14,qx,qy,qz);
      k--;
   }


   D2.x = A.x - b/4.0; D2.y = A.y; D2.z = A.z;/* 篮筐2下的的三分线及其斜线 */
   k = 70;
   while(k>=65)
   {
      Yuan_3D(D2,k,15,qx,qy,qz);
      k--;
   }
   D2.x = A.x - b/4.0 - 35; D2.y = A.y; D2.z = A.z;
   Rect_3D(D2,200,70,6,qx,qy,qz);

   D2.x = A.x - 3 * b/8.0; D2.y = A.y - 85; D2.z = A.z;  /* 斜线 */
   Rect_3D_XuanZhuan(D2,5,b/4.0 + 10,15,10,D2,3,qx,qy,qz);


   D2.x = A.x - 3 * b/8.0; D2.y = A.y + 85; D2.z = A.z;  /* 斜线 */
   Rect_3D_XuanZhuan(D2,5,b/4.0 + 10,15,-10,D2,3,qx,qy,qz);


   D2.x = A.x - b/4.0; D2.y = A.y; D2.z = A.z;  /* 篮筐2下的圆*/
   k = 50;
   while(k>=45)
   {
      Yuan_3D(D2,k,15,qx,qy,qz);
      k--;
   }
   Rect_3D(D2,100,5,15,qx,qy,qz);

}

void My3DGraphics_C(Point3D A,float qx,float qy,float qz)
{

   int L,d,X,Y,Z,i,j,k;
   Point3D T1,T2,D1,D2;

   setbkcolor(2);

   L = 2000; d = 400;

   T1.x = A.x; T1.y = A.y - d/2.0; T1.z = A.z;
   T2.x = A.x; T2.y = A.y + d/2.0; T2.z = A.z;

   i = A.x + L/2.0; j = T1.y;  /* 公路 */
   while(i >= A.x - L/2.0)
   {
      while(j <= T2.y)
      {
        X = i; Y = j; Z = A.z;
        Point3D_2D(&X,&Y,&Z,qx,qy,qz);
           putpixel(X,Y,7);

        j++;

      }

      i--; j = T1.y;
   }


   j = (T1.y + T2.y)/2.0 -10;

/* */ /*  for(k = A.x + L/2.0;k>=A.x - L/2.0;)   公路的美化
    {
      i = k;
      while(i >=k-60)
      {
        while(j<=(T1.y + T2.y)/2.0 +10)
        {
           X = i; Y = j; Z = T1.z;
           Point3D_2D(&X,&Y,&Z,qx,qy,qz);
           putpixel(X,Y,6);
           j++;

        }
         i--;  j = (T1.y + T2.y)/2.0 -10;

      }
      k = k - 100;

    }   */


  j = (T1.y + T2.y)/2.0 -10;

   for(k = A.x + L/2.0;k>=A.x - L/2.0;)  /* 公路的美化 */
    {
      i = k;
      while(i >=k-60)
      {
        while(j<=(T1.y + T2.y)/2.0 +10)
        {
           X = i; Y = j; Z = T1.z;
           Point3D_2D(&X,&Y,&Z,qx,qy,qz);

           putpixel(X,Y,6);


           j++;

        }
         i--;  j = (T1.y + T2.y)/2.0 -10;

      }
      k = k - 100;



   }

    /* 画车 */

    D1.x = A.x; D1.y = A.y + 50; D1.z = A.z - 15;  /* 车能4 */

    k = 0;
    while(k <= 5)
    {
      D1.y = A.y + 50 + k;
      Yuan_3D_2(D1,10 + k,8,qx,qy,qz);

      k++;
    }

    D1.x = A.x; D1.y = A.y + 50; D1.z = A.z - 15;

    k = 10;
    while(k >= 0)
    {
      Yuan_3D_2(D1,k,15,qx,qy,qz);

      k--;
    }


    D1.x = A.x; D1.y = A.y -50; D1.z = A.z - 15;  /* 车能1 */

    k = 0;
    while(k <= 5)
    {
      D1.y = A.y -50 + k;
      Yuan_3D_2(D1,10 + k,8,qx,qy,qz);
      k++;
    }

    D1.x = A.x; D1.y = A.y -50; D1.z = A.z - 15;

    k = 10;
    while(k >= 0)
    {
      Yuan_3D_2(D1,k,15,qx,qy,qz);

      k--;
    }


    D1.x = A.x + 150; D1.y = A.y + 50; D1.z = A.z - 15;  /* 车能3 */

    k = 0;
    while(k <= 5)
    {
      D1.y = A.y + 50 + k;
      Yuan_3D_2(D1,10 + k,8,qx,qy,qz);

      k++;
    }

    D1.x = A.x + 150; D1.y = A.y + 50; D1.z = A.z - 15;

    k = 10;
    while(k >= 0)
    {
      Yuan_3D_2(D1,k,15,qx,qy,qz);

      k--;
    }


    D1.x = A.x + 150; D1.y = A.y - 50; D1.z = A.z - 15;  /* 车能2 */

    k = 0;
    while(k <= 5)
    {
      D1.y = A.y -50 + k;
      Yuan_3D_2(D1,10 + k,8,qx,qy,qz);

      k++;
    }

    D1.x = A.x + 150; D1.y = A.y - 50; D1.z = A.z -15;

    k = 10;
    while(k >= 0)
    {
      Yuan_3D_2(D1,k,15,qx,qy,qz);

      k--;
    }
}


void My3DGraphics_D(Point3D A,float qx,float qy,float qz)
{
   int a,b,k;

   setbkcolor(7);

   a = 400; b = 800;

   Rect_3D(A,a,b,15,qx,qy,qz);
   Rect_3D(A,a-10,b-10,2,qx,qy,qz);

   Rect_3D(A,a,5,15,qx,qy,qz);

   k = 100;
   while(k>=95)
   {
      Yuan_3D(A,k,15,qx,qy,qz);
      k--;
   }


}


/***************************/
/****                   ****/
/****   图形显示函数    ****/

⌨️ 快捷键说明

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