/*    Program vykreslující Mandelbrotovu množinu
 * --------------------------------------------------
 * Copyright (c) 1999 Martin Hinner, <mhi@penguin.cz>
 */
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <complex.h>

#include "gr.c"      /* Naincluduje gr. knihovničku */

#define ITER  255    /* Počet iterací, snížením se zrychlý výpočet */
#define N     2      /* Exponent Mandelbrotovy množiny */

void main()
{
 int x,y,i,j;
 complex c,z;

 initg();                      /* Inicializace grafiky */

 for (x=0;x<0x8;x++)           /* Nastavení použitelné palety */
  setpal(x,x*8,0,x*8);
 for (x=0x8;x<0x10;x++)
  setpal(x,(x-8)*8,(x-8)*8,0);
 for (x=0x10;x<0x40;x++)
  setpal(x,0,63-x,63-x);
 for (x=0;x<0x40;x++)
  setpal(x+64,0,x,63);
 for (x=0;x<0x40;x++)
  setpal(x+128,x,63,63);
 for (x=0;x<0x40;x++)
  setpal(x+192,63-x,63-x,0);

 for (x=0;x<320;x++)           /* Kreslí po sloupcích množinu */
  {
   if (kbhit())                /* Program je možné předčasně ukončit */
    {
     getch();
     break;
    }
   for (y=0;y<200;y++)
    {
     c = z = complex((x-160)/70.0,(y-100)/70.0); /* Přiřadí komplexní číslo */
     for (i=0;i<ITER;i++)                /* Zkoumá, zda n-tá mocnina */
      {                                  /* přesáhne hodnotu 2       */
       c = pow(c,N)+z;
       if (abs(c)>2)
	break;
      }
     putpix(x,y,i);                 /* ... a zobrazí barvu dle počtu iterací */
    }
   putpix(x,199,62);
  }

 getch();                 /* Tydlydydydá...konec! */
 doneg();
}
