Program Mandelbrot; {$B-,E+,G+,N+,Q-,R-,S-,X+} uses Graph, CRT; type Tfloat = double; { Tipo delle variabili floating point } const PATH_TO_BGI = 'c:\bp\bgi'; INFX = -2; SUPX = 2; { Porzione di piano complesso } INFY = -2; SUPY = 2; { da visualizzare } MAXCONT = 61; { Max num. di ripetizioni del ciclo WHILE } SHIFT_COL = 7; { Cambia questa costante per... } { ...modificare tutti i colori } var cre, cim : Tfloat; { Parte reale e immaginaria di c } zre, zim : Tfloat; { Parte reale e immaginaria di z } temp_zre : Tfloat; { Variabile temporanea per Zre } latox, { Largh. del rettangolo di piano considerato } latoy : Tfloat; { Altezza del rettangolo di piano considerato } incremx, { Distanza orizz. tra due punti consecutivi } incremy : Tfloat; { Distanza vert. tra due punti consecutivi } i, j : word; { Coordinate di un pixel } col : word; { Colore scelto per il pixel esaminato } contatore : word; { Numero di ripetizioni del ciclo WHILE } gd, gm : integer; err_code : integer; begin gd := Detect; InitGraph(gd, gm, PATH_TO_BGI); err_code := GraphResult; if err_code <> grOK then begin Writeln(GraphErrorMsg(err_code)); halt(1) end; latox := SUPX - INFX; latoy := SUPY - INFY; incremx := latox/GetMaxX; incremy := latoy/GetMaxY; for i := 0 to GetMaxX do { Esamina tutte le colonne dello schermo } begin cre := INFX + (i*incremx); for j := 0 to GetMaxY do { Esamina i pixel della colonna iesima } begin contatore := 0; zim := 0; zre := 0; cim := INFY + (j*incremy); if (cre>-0.49) and (cim>-0.5) and (cre<0.21) and (cim<0.5) then contatore := MAXCONT; while (sqr(zre) + sqr(zim) <= 4.00) and { Applica la legge } (contatore < MAXCONT) do { di Mandelbrot } begin temp_zre := sqr(zre) - sqr(zim) + cre; zim := 2*zim*zre + cim; zre := temp_zre; inc(contatore) end; { while } col := contatore + SHIFT_COL; PutPixel(i,j, col) { <-- Finalmente! } end; { For j } while KeyPressed do { Eventuale uscita anticipata } if ReadKey = #27 then { Per uscire premere ESC } begin CloseGraph; halt end; end; { For i } while KeyPressed do ReadKey; { Svuota il buffer } ReadKey; { Attende un carattere } CloseGraph end.
Torna alla pagina sui frattali