pascalabcnet/TestSuite/CompilationSamples/Mandelbrot.pas
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

43 lines
1.1 KiB
ObjectPascal

// Äåìîíñòðàöèÿ ôðàêòàëüíîé ãðàôèêè. Ìíîæåñòâî Ìàíäåëüáðîòà
// Äëÿ êàæäîé òî÷êè êîìïëåêñíîé ïëîñêîñòè z=(x,y) âûïîëíÿåì èòåðàöèîííûé ïðîöåññ z=z^2+c, c=(cx,cy)
// Ñ÷èòàåì êîëè÷åñòâî èòåðàöèé i äî òåõ ïîð ïîêà íå âûïîëíèòñÿ óñëîâèå |x|>max è |y|>max
// Ïîñëå ýòîãî ðèñóåì òî÷êó x,y ñ íàñûùåííîñòüþ êðàñíîãî öâåòà, ïðîïîðöèîíàëüíîé i
uses GraphABC,Utils;
const
max = 10;
coef1 = 0.5;
coef2 = 0.88;
scalex = 0.0035;
scaley = 0.0035;
dx = 430;
dy = 300;
begin
Window.Title := 'Ôðàêòàëû: ìíîæåñòâî Ìàíäåëüáðîòà';
SetWindowSize(600,600);
CenterWindow;
for var ix:=0 to Window.Width-1 do
for var iy:=0 to Window.Height-1 do
begin
var x := 0.0;
var y := 0.0;
var cx := scalex * (ix - dx);
var cy := scaley * (iy - dy);
var i := 1;
while i<255 do
begin
var x1 := x*x-y*y+cx;
var y1 := 2*x*y+cy;
x := x1;
y := y1;
if (abs(x)>max) and (abs(y)>max) then break;
i += 1;
end;
if i>=255 then SetPixel(ix,iy,clRed)
else SetPixel(ix,iy,RGB(255,255-i,255-i));
end;
writeln('Âðåìÿ ðàñ÷åòà = ',Milliseconds/1000,' ñ');
end.