Mandelbrot

2
C /* Programma per disegnare l'insieme di Mandelbrot */ /* Autore: Pino Navato <[email protected]> */ #inlude <grap!is.!> #inlude <onio.!> t"pede double $ loat% /* $ipo delle variabili loating point */ onst !ar* PA$& $( ) + , -: t bgi-% onst $ loat +N 0 , 123 45P0 , 23 /* Por6ione di piano omplesso */ +N 7 , 123 45P7 , 2% /* da visuali66are */ onst unsigned MA0C(N$ , 893 /* Ma num. di ripeti6ioni del ilo ;&+ = */ 4&+ $ C( , % /* Cambia ?uesta ostante per... */ /* ...modi iare tutti i olori */ $ loat re3 im% /* Parte reale e immaginaria di */ $ loat 6re3 6im% /* Parte reale e immaginaria di 6 */ $ loat temp 6re% /* ariabile temporanea per re */ $ loat lato 3 /* arg!. del rettangolo di piano onsiderato */ lato"% /* Alte66a del rettangolo di piano onsiderato */ $ loat inrem 3 /* Bistan6a ori66. tra due punti onseutivi */ inrem"% /* Bistan6a vert. tra due punti onseutivi */ unsigned i3 % /* Coordinate di un pi el */ unsigned ol% /* Colore selto per il pi el esaminato */ unsigned ontatore% /* Numero di ripeti6ioni del ilo ;&+ = */ int gd3 gm% int err ode% int mainDvoidE F gd , B=$=C$% initgrap!DGgd3 Ggm3 PA$& $( ) +E% err ode , grap!resultDE% i Derr ode H, gr(IE F print D-Js n-3 grap!errormsgDerr odeEE% return 9% K lato , 45P0 1 +N 0% lato" , 45P7 1 +N 7% inrem , lato /getma DE% inrem" , lato"/getma "DE% or Di,L% i<,getma DE% i E /* =samina tutte le olonne dello s!ermo */ F re , +N 0 Di*inrem E% or D ,L% <,getma "DE% E /* =samina i pi el della olonna iesima */ F ontatore , L% 6im , 6re , L% im , +N 7 D *inrem"E% i Dre>1L. O GG im>1L. GG re<L.29 GG im<L. E ontatore , MA0C(N$%

description

Algoritmo in C per generare Insieme di Mandelbrot

Transcript of Mandelbrot

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

C

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

/* Autore: Pino Navato */

#include

#include

typedef double Tfloat; /* Tipo delle variabili floating point */

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

const Tfloat INFX = -2, SUPX = 2, /* Porzione di piano complesso */

INFY = -2, SUPY = 2; /* da visualizzare */

const unsigned MAXCONT = 61, /* Max num. di ripetizioni del ciclo WHILE */

SHIFT_COL = 7; /* Cambia questa costante per... */

/* ...modificare tutti i colori */

Tfloat cre, cim; /* Parte reale e immaginaria di c */

Tfloat zre, zim; /* Parte reale e immaginaria di z */

Tfloat temp_zre; /* Variabile temporanea per Zre */

Tfloat latox, /* Largh. del rettangolo di piano considerato */

latoy; /* Altezza del rettangolo di piano considerato */

Tfloat incremx, /* Distanza orizz. tra due punti consecutivi */

incremy; /* Distanza vert. tra due punti consecutivi */

unsigned i, j; /* Coordinate di un pixel */

unsigned col; /* Colore scelto per il pixel esaminato */

unsigned contatore; /* Numero di ripetizioni del ciclo WHILE */

int gd, gm;

int 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-0.5 && cre