Sei sulla pagina 1di 2

C

/* Programma per disegnare l'insieme di Mandelbrot */


/* Autore: Pino Navato <pnavato@libero.it> */
#include <graphics.h>
#include <conio.h>
typedef double Tfloat;

/* Tipo delle variabili floating point */

const char* PATH_TO_BGI = "c:\\tc\\bgi";


const Tfloat INFX = -2,
INFY = -2,

SUPX = 2,
SUPY = 2;

const unsigned MAXCONT


= 61,
SHIFT_COL = 7;
Tfloat
Tfloat
Tfloat
Tfloat

cre, cim;
zre, zim;
temp_zre;
latox,
latoy;
Tfloat
incremx,
incremy;
unsigned i, j;
unsigned col;
unsigned contatore;
int
int

/*
/*
/*
/*
/*
/*
/*
/*
/*
/*

/* Porzione di piano complesso */


/*
da visualizzare
*/

/* Max num. di ripetizioni del ciclo WHILE */


/* Cambia questa costante per... */
/* ...modificare tutti i colori */

Parte reale e immaginaria di c */


Parte reale e immaginaria di z */
Variabile temporanea per Zre */
Largh. del rettangolo di piano considerato */
Altezza del rettangolo di piano considerato */
Distanza orizz. tra due punti consecutivi */
Distanza vert. tra due punti consecutivi */
Coordinate di un pixel */
Colore scelto per il pixel esaminato */
Numero di ripetizioni del ciclo WHILE */

gd, gm;
err_code;

int main(void)
{
gd = DETECT;
initgraph(&gd, &gm, PATH_TO_BGI);
err_code = graphresult();
if (err_code != grOk)
{
cprintf("%s\n", grapherrormsg(err_code));
return 1;
}
latox = SUPX - INFX;
latoy = SUPY - INFY;
incremx = latox/getmaxx();
incremy = latoy/getmaxy();
for (i=0; i<=getmaxx(); i++)
/* Esamina tutte le colonne dello schermo */
{
cre = INFX + (i*incremx);
for (j=0; j<=getmaxy(); j++) /* Esamina i pixel della colonna iesima
*/

{
contatore = 0;
zim = zre = 0;
cim = INFY + (j*incremy);
if (cre>-0.49 && cim>-0.5 && cre<0.21 && cim<0.5)
contatore = MAXCONT;

while (zre*zre + zim*zim <= 4.00 &&


/* Applica la legge */
contatore < MAXCONT)
/* di Mandelbrot */
{
temp_zre = zre*zre - zim*zim + cre;
zim = 2*zim*zre + cim;
zre = temp_zre;
contatore++;
} /* while */

col = contatore + SHIFT_COL;


putpixel(i,j, col);
/* <-- Finalmente! */
/* for j */

while (kbhit())
if (getch() == 27)
{
closegraph();
return 0;
}
}

/* Eventuale uscita anticipata */


/* Per uscire premere ESC */

/* for i */

while (kbhit()) getch();


getch();
closegraph();
return 0;

/* Svuota il buffer */
/* Attende un carattere */

Potrebbero piacerti anche