Множества Мандельброта — на Delphi
Я нарисовал множества Мандельброта на Delphi, а не flat assembler!
Embarcadero Delphi for Win32 compiler version 35.0
А именно:
DCC32.EXE
rlink32.dll
SysInit.dcu
System.dcu
Все!
Вот полная Mandelbrot.pas
{$APPTYPE CONSOLE}
const
horiz:longint=1024; vert:longint=1024;
absc:extended=-1.96680095; ordi:extended=0.00000478; size:extended=0.00000014;
q:array[0..254]of byte=(234,94,198,83,178,216,183,78,41,84,119,63,211,71,123,38,
223,73,197,249,126,227,211,5,36,36,128,5,151,2,198,166,197,181,142,52,174,151,
244,164,255,62,173,75,21,197,126,225,130,146,244,175,86,1,180,253,198,191,50,36,
233,200,150,221,176,73,23,161,71,224,41,69,139,245,44,40,68,45,147,127,73,39,
156,189,191,20,19,15,27,203,206,97,156,111,189,126,87,209,209,36,23,17,15,49,
172,58,146,65,93,214,80,80,168,177,231,81,122,75,196,189,141,185,105,138,152,
225,171,28,120,103,29,13,140,172,20,235,214,174,237,70,179,188,127,169,40,58,
242,93,32,252,78,13,26,221,141,178,25,171,4,79,231,137,83,113,230,88,90,124,18,
217,194,46,236,126,32,228,103,53,206,150,28,159,237,138,83,114,58,47,176,254,
161,177,138,24,191,38,59,225,182,112,250,39,10,47,2,96,101,93,21,116,129,117,
172,209,145,64,95,149,223,155,65,178,142,224,92,93,159,199,116,52,178,214,192,
230,47,198,68,75,179,0,8,220,51,69,171,81,41,95,108,20,121,18,215,15,75);
var
f:file;
a,b,t:longint;
c,d,cc,dd,m,n,step,absc2,ordi2:extended;
s:array[0..61439]of byte;
pal:array[0..255]of array[0..3]of byte;
h:array[0..13]of longint=($4D42,0,0,1078,40,0,0,$080001,0,0,2834,2834,0,0);
begin
h[5]:=horiz; h[6]:=vert;
a:=horiz; if (a and 3<>0) then a:=(a+4) and $FFFFFFFC; h[9]:=a*vert; h[1]:=h[9]+1078;
assign(f,'Mandelbrot.bmp'); rewrite(f,1);
blockwrite(f,h,2); blockwrite(f,h[1],52);
for a:=0 to 254 do
begin
pal[a][0]:=round(127+127*cos(2*pi*(a+16)/255)); pal[a][1]:=round(127+127*sin(2*pi*(a+16)/255)); pal[a][2]:=q[a]; pal[a][3]:=0
end;
for a:=0 to 2 do pal[255][a]:=255; pal[255][3]:=0;
blockwrite(f,pal,1024);
step:=size/horiz;
absc2:=absc-step*(horiz-1)/2; ordi2:=ordi-step*(vert-1)/2;
for b:=0 to vert-1 do
begin
n:=ordi2+b*step;
for a:=0 to horiz-1 do
begin
m:=absc2+a*step;
c:=m; d:=n; t:=4081;
repeat cc:=c*c; dd:=d*d; d:=(c+c)*d+n; c:=cc-dd+m; dec(t) until (t=0) or (cc+dd>1000000.0);
if (t=0) then s[a]:=255 else s[a]:=t mod 255;
end;
blockwrite(f,s,h[9] div vert);
write('Done: ',b+1,chr(13))
end;
close(f)
end.
Компилируем!
Mandelbrot.exe готова.
И мы ее пустим!
Появилось Mandelbrot.bmp — вот этой
А если другие
absc:extended=-0.121182862923836;
ordi:extended=0.982857218328743;
size:extended=0.000000000000079;
то вот
а третий
absc:extended=-0.163419888457472295;
ordi:extended=1.0978411602700539;
size:extended=0.0000000000000034;
то вот
а четвертый
absc:extended=-0.7419938603738353;
ordi:extended=0.143187148318039;
size:extended=0.000000000000005;
то вот
Фрактал можно увеличивать бесконечно, и будут видны все более мелкие детали его строения.
Вот не я