home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c3 / pro1 / 4dmandel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-16  |  3.1 KB  |  133 lines

  1. # include <stdio.h>
  2. # include <stdlib.h>
  3. # include <conio.h>
  4. # include <graphics.h>
  5.  
  6. #define DRIVERPATH "d:\\tc\\bgi"
  7.  
  8. void main()
  9. {
  10.     long    xecke , yecke , zecke , wecke;
  11.     float    fxecke , fyecke , fzecke , fwecke;
  12.     long    seite , spaltex , spaltey , spaltez;
  13.     float    fseite;
  14.     long    orx , ory , orz;
  15.     int    gr , inskin , outskin;
  16.     long    ar , ai , br , bi;
  17.     register long    zr , zi , zr2 , zi2;
  18.     long    ar2 , ai2 , ahelp1 , ahelp2 , help , temp;
  19.     int    iterations;
  20.     int    shade , col;
  21.     int    x , y, z;
  22.     int    orgx , orgy;
  23.     int    graphdriver , graphmode;
  24.     int    i;
  25.  
  26.     clrscr();
  27.  
  28.     printf("Berechnungsparameter\n");
  29.     printf("\n x-Ecke              : ") ;  scanf("%f", &fxecke);
  30.     printf("\n y-Ecke              : ") ;  scanf("%f", &fyecke);
  31.     printf("\n z-Ecke              : ") ;  scanf("%f", &fzecke);
  32.     printf("\n w-Ecke              : ") ;  scanf("%f", &fwecke);
  33.     printf("\n Seitel              : ") ;  scanf("%f", &fseite);
  34.     printf("\n");
  35.     printf("\n x-Orientierung      : ") ; scanf("%ld", &orx);
  36.     printf("\n y-Orientierung      : ") ; scanf("%ld", &ory);
  37.     printf("\n z-Orientierung      : ") ; scanf("%ld", &orz);
  38.     printf("\n");
  39.     printf("\n Innerer Schwellwert : ") ; scanf("%d", &inskin);
  40.     printf("\n Äußerer Schwellwert : ") ; scanf("%d", &outskin);
  41.     printf("\n");
  42.     printf("\n Auflösung           : ") ; scanf("%d", &gr);
  43.  
  44.     xecke = (long)(fxecke * 8192);
  45.     yecke = (long)(fyecke * 8192);
  46.     zecke = (long)(fzecke * 8192);
  47.     wecke = (long)(fwecke * 8192);
  48.     seite = (long)(fseite * 8192);
  49.  
  50.     spaltex = (seite / gr) * orx;
  51.     spaltey = (seite / gr) * ory;
  52.     spaltez = (seite / gr) * orz;
  53.  
  54.     col = 0;
  55.  
  56.     graphdriver = VGA; graphmode = VGAHI;
  57.     initgraph(&graphdriver,&graphmode, DRIVERPATH);
  58.  
  59.     orgx = 320 -gr;
  60.     orgy = 240 - (gr >> 1);
  61.  
  62.     for (i = 0; i < 16; i++)
  63.         setpalette(i,i);
  64.  
  65.     setrgbpalette(0,0,0,0);
  66.     setrgbpalette(1,42,42,0);
  67.     setrgbpalette(2,63,63,0);
  68.     setrgbpalette(5,32,32,0);
  69.     setrgbpalette(6,40,40,0);
  70.     setrgbpalette(3,42,21,42);
  71.     setrgbpalette(4,63,32,63);
  72.     setrgbpalette(7,32,16,32);
  73.     setrgbpalette(8,40,20,40);
  74.     bi = wecke;
  75.     br = zecke;
  76.  
  77.     for (z = 0; z < gr; z++)
  78.     {
  79.         ai = yecke;
  80.  
  81.         for (y = 0; y < gr; y++)
  82.         {
  83.             ar = xecke;
  84.             shade = 0;
  85.  
  86.             for (x = gr; x > -1; )
  87.             {
  88.  
  89.                 iterations = 0;
  90.                 zr = -ar; zi = -ai;
  91.                 help = (6 * ar * ai) >> 13;
  92.                 ar2 = (ar * ar) >> 13;
  93.                 ai2 = (ai * ai) >> 13;
  94.                 ahelp2 = -(ahelp1 = ar2 -ai2);
  95.  
  96.  
  97.                 do
  98.                 {
  99.                     temp = ((zr * ((zr2 = ((zr * zr) >> 13))
  100.                             - 3 * ((zi2 = ((zi * zi) >> 13)) + ahelp1))
  101.                             + help * zi) >> 13) + br;
  102.                     zi = ((-zi * (zi2 - 3 * (zr2 + ahelp2))
  103.                           - help * zr) >> 13) + bi;
  104.                     zr = temp;
  105.                 }
  106.                 while ((++iterations < inskin) && ((zr2 + zi2) < 32768));
  107.  
  108.                 if (iterations >= outskin)
  109.                     shade |= 4;
  110.  
  111.                 if (shade & 2)
  112.                 {
  113.                     putpixel(x + y + orgx, 480 - (((x - y) >> 1) + z + orgy),
  114.                              shade + col);
  115. /*                    col = (z & 16) ? -1 : 1;               */
  116.                     col = (iterations == inskin) ? -1 : 1;
  117.                 }
  118.                 else
  119.                     col = -1;
  120.  
  121.                 shade >>= 1;
  122.  
  123.                 ar += spaltex;
  124.                 x--;
  125.             }
  126.             ai += spaltey;
  127.         }
  128.         br += spaltez;
  129.     }
  130.  
  131.  
  132. }
  133.