2015-12-28 14:25:15 +03:00
|
|
|
|
// Демонстрация фрактальной графики. Множество Мандельброта
|
|
|
|
|
|
// Для каждой точки комплексной плоскости z=(x,y) выполняем итерационный процесс z=z^2+c, c=(cx,cy)
|
|
|
|
|
|
// Считаем количество итераций i до тех пор пока не выполнится условие |x|>max и |y|>max
|
|
|
|
|
|
// После этого рисуем точку x,y с насыщенностью красного цвета, пропорциональной i
|
2015-05-14 22:35:07 +03:00
|
|
|
|
uses GraphABC,Utils;
|
|
|
|
|
|
|
|
|
|
|
|
const
|
|
|
|
|
|
max = 10;
|
|
|
|
|
|
coef1 = 0.5;
|
|
|
|
|
|
coef2 = 0.88;
|
|
|
|
|
|
scalex = 0.0035;
|
|
|
|
|
|
scaley = 0.0035;
|
|
|
|
|
|
dx = 430;
|
|
|
|
|
|
dy = 300;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
Window.Title := 'Фракталы: множество Мандельброта';
|
2015-05-14 22:35:07 +03:00
|
|
|
|
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;
|
2015-12-28 14:25:15 +03:00
|
|
|
|
writeln('Время расчета = ',Milliseconds/1000,' с');
|
2015-05-14 22:35:07 +03:00
|
|
|
|
end.
|
|
|
|
|
|
|