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
'); //-->