Hallo, hab eine Frage zur Dimensionsbestimmung mittels Box-Counting. Ich bekomme eine 1280 mal 1280 matrix übergeben. Enthalten sind Grauwerte. Jetzt hab ich mir iene Neue 1280 mal 1280 matrix erstellt in der nur die Informationen belegt oder unbelegt in einem Feld sind.
Nun halbiere ich die LÄnge auf 640. Dann hab ich folglich 4 Quadrate. Nun schaue ich in welchem Quadrat mindestens ein belegtes Feld mit Wert eins ist. Dann ist das gesamte Quadrat belegt. Das für ich so fort bis ich die Länge 5 habe, das entspricht einer Anzahl von 8 Skalierungen. Nun hab ich in dem array summe[i] die Anzahl der belegten Quadrate in Abhängigkeit des Verkleinerungsfaktors. Wie bestimme ich nun die fraktale dimension mittels box counting? Mit ln(n(i)) / ln(1/2^i) erhalte ich für ein Quadrat die Dimension 2 und eine Linie 1, es stimmt also. Aber wie ist die Dimension mittels box counting, da kommen bei mir seltsame Werte. Hier der Quelltext falls es einen interessiert. MfG Olli
program fraktal;
uses crt;
var
grenze, i, j, x, y, v, q : longint;
wert : array[1…10,1…70000] of double;
ma1, ma2 : array[1…1280,1…1280] of double;
ag : array[1…10] of longint;
gr : array[1…10,0…70000] of double;
summe : array[1…10] of longint;
begin
randomize;
writeln('Grenze eingeben: ');
readln(grenze);
for i := 1 to 1280 do
begin
for j := 1 to 1280 do
begin
ma2[j,i] := 0;
if round(ma1[j,i]) >= grenze then
begin
ma2[j,i] := 1;
end;
end;
end;
for i := 1 to 8 do
begin
ag[i] := round(exp(i*ln(2)));
for j := 1 to ag[i] do
begin
gr[i,j] := (1280 / ag[i]) * j;
end;
end;
for i := 1 to 10 do
begin
gr[i,0] := 0;
end;
for i := 1 to 1280 do
begin
for j := 1 to 1280 do
begin
ma2[i,j] := 1;
end;
end;
for v := 1 to 8 do
begin
q := 0;
for i := 1 to ag[v] do
begin
for j := 1 to ag[v] do
begin
inc(q);
for y := round(gr[v,i-1]) + 1 to round(gr[v,i]) do
begin
for x := round(gr[v,j-1]) + 1 to round(gr[v,j]) do
begin
if ma2[x,y] = 1 then
begin
wert[v,q] := 1;
end;
end;
end;
end;
end;
end;
for i := 1 to 8 do
begin
for j := 1 to (ag[i] * ag[i]) do
begin
if wert[i,j] = 1 then
begin
end;
end;
end;
for i := 1 to 8 do
begin
summe[i] := 0;
for j := 1 to (ag[i] * ag[i]) do
begin
summe[i] := round(summe[i] + wert[i,j]);
end;
writeln(‚Bei einem Divisionsfaktor von ‚,exp(i*ln(2)):8:2,‘ ben”tigt man zum berdecken ‚,summe[i],‘ Quadrate!‘);
writeln('Die errechnete dimension betr„gt also: ',ln(summe[i])/ln(1/exp(i*ln(2)) ):4:2);
end;
readln;
end.