Voranmerkung: Das ist (wie der geneigte Leser schon gemerkt haben sollte) eine Event-Method auf das Event Botton1.Click. Auf der Form befindet sich nebst dem Button1 noch unbedingt ein Image1 (also ein TImage). Mehr braucht es schon nicht.
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d,e,f: array[0..3] of real;
NX,NY,n,r,i,j,k,ix,iy: Integer;
x,y,xlast,ylast,xmin,xmax,
ymin,ymax,xmid,ymid,scale: real;
begin
Button1.Enabled:=false;
NX:=400;
NY:=400;
a[0]:=0;
a[1]:=0.2;
a[2]:=-0.15;
a[3]:=0.75;
b[0]:=0;
b[1]:=-0.26;
b[2]:=0.28;
b[3]:=0.04;
c[0]:=0;
c[1]:=0.23;
c[2]:=0.26;
c[3]:=-0.04;
d[0]:=0.16;
d[1]:=0.22;
d[2]:=0.24;
d[3]:=0.85;
e[0]:=0;
e[1]:=0;
e[2]:=0;
e[3]:=0;
f[0]:=0;
f[1]:=1.6;
f[2]:=0.44;
f[3]:=1.6;
n:= 100000; //Hier koennten auch mehr oder weniger Iterationen eingesetzt werden
xlast:=0;
ylast:=0;
xmin:=1e32;
xmax:=-1e32;
ymin:=1e32;
ymax:=-1e32;
for j:=0 to 2 do
begin
for i:=0 to n do
begin
r := random(100);
case r of
0..9: k:=0;
10..17: k:=1;
18..25: k:=2;
else
k:=3;
end;
x := a[k] * xlast + b[k] * ylast + e[k];
y := c[k] * xlast + d[k] * ylast + f[k];
xlast := x;
ylast := y;
if (x > xmin) then
begin
xmin := x;
end;
if (y > ymin) then
begin
ymin := y;
end;
if (x > xmax) then
begin
xmax := x;
end;
if (y > ymax) then
begin
ymax := y;
end;
if (j = 1) then
begin
scale := MIN(NX / (xmax - xmin),NY / (ymax - ymin));
xmid := (xmin + xmax) / 2;
ymid := (ymin + ymax) / 2;
ix := round(NX / 2 + (x - xmid) * scale);
iy := round(NY / 2 + (y - ymid) * scale);
Image1.Canvas.Pixels[ix,400-iy]:=clblack;
end;
end;
end;
Button1.Enabled:=true;
end;