Jan 15, 2016
ha a tárgy dimenziója (D) megegyezik az euklideszi tér dimenziójával (d)
ha egy testre definiálható a dimenziója, de az kisebb, mint d
d – fraktáldimenzió a valóságban a skálázási egyenlet nem érvényes a teljes tartományra, van
egy alsó és egy felső levágási határ mikrostruktúra <-> végesméret
fraktálok másik jellemzője az önhasonlóság a különböző skálákon
void clusterDetect(){ clusterNr = 1; for(int lx=1; lx<N; lx++) for(int ly=1; ly<N; ly++){ if(lattice[lx][ly] == 1){ clusterNr++; lattice[lx][ly] = clusterNr; rec(lx, ly); } }}
void clusterDetect(){ clusterNr = 1; for(int lx=1; lx<N; lx++) for(int ly=1; ly<N; ly++){ if(lattice[lx][ly] == 1){ clusterNr++; lattice[lx][ly] = clusterNr; rec(lx, ly); } }}
void rec(int i, int j){ if(lattice[i+1][j]==1){ lattice[i+1][j] = clusterNr; rec(i+1, j); } if(lattice[i][j+1]==1){ lattice[i][j+1] = clusterNr; rec(i, j+1); } if(lattice[i-1][j]==1){ lattice[i-1][j] = clusterNr; rec(i-1, j); } if(lattice[i][j-1]==1){ lattice[i][j-1] = clusterNr; rec(i, j-1); }}
void rec(int i, int j){ if(lattice[i+1][j]==1){ lattice[i+1][j] = clusterNr; rec(i+1, j); } if(lattice[i][j+1]==1){ lattice[i][j+1] = clusterNr; rec(i, j+1); } if(lattice[i-1][j]==1){ lattice[i-1][j] = clusterNr; rec(i-1, j); } if(lattice[i][j-1]==1){ lattice[i][j-1] = clusterNr; rec(i, j-1); }}
Kla
szte
rdet
ektá
lás
Megj. mindkét metódus (függvény) ismeri a lattice és a clusterNrváltozókatebben a példában a rácsot szegélyeztük 0 értékű cellákkal
public void iterate(double x1, double y1, double x2, double y2, int n) { if (n > 0) { double dx = (x2−x1)/3; double dy = (y2−y1)/3; double xOneThird = x1 + dx; // új végpont a szakasz 1/3 pontjánál double yOneThird = y1 + dy; double xTwoThird = x1 + 2 dx; // új végpont a szakasz 1/3 ∗pontjánál double yTwoThird = y1 + 2 dy;∗ // a (dx, dy) szakasz elforgatasa 60 fokkal // és ennek hozzáadása a (xOneThird,yOneThird)-hez double xMidPoint = (0.5 dx − 0.866 dy + xOneThird);∗ ∗ double yMidPoint = (0.5 dy + 0.866 dx + yOneThird);∗ ∗ // minden szegmens 4 újabbat generál iterate (x1,y1,xOneThird,yOneThird,n−1); iterate (xOneThird,yOneThird,xMidPoint,yMidPoint,n−1); iterate (xMidPoint,yMidPoint,xTwoThird,yTwoThird,n−1); iterate (xTwoThird,yTwoThird,x2,y2,n−1); }else { int ix1 = myWorld.xToPix(x1); int iy1 = myWorld.yToPix(y1); int ix2 = myWorld.xToPix(x2); int iy2 = myWorld.yToPix(y2); drawSegment(ix1,iy1,ix2,iy2 ); }}
public void iterate(double x1, double y1, double x2, double y2, int n) { if (n > 0) { double dx = (x2−x1)/3; double dy = (y2−y1)/3; double xOneThird = x1 + dx; // új végpont a szakasz 1/3 pontjánál double yOneThird = y1 + dy; double xTwoThird = x1 + 2 dx; // új végpont a szakasz 1/3 ∗pontjánál double yTwoThird = y1 + 2 dy;∗ // a (dx, dy) szakasz elforgatasa 60 fokkal // és ennek hozzáadása a (xOneThird,yOneThird)-hez double xMidPoint = (0.5 dx − 0.866 dy + xOneThird);∗ ∗ double yMidPoint = (0.5 dy + 0.866 dx + yOneThird);∗ ∗ // minden szegmens 4 újabbat generál iterate (x1,y1,xOneThird,yOneThird,n−1); iterate (xOneThird,yOneThird,xMidPoint,yMidPoint,n−1); iterate (xMidPoint,yMidPoint,xTwoThird,yTwoThird,n−1); iterate (xTwoThird,yTwoThird,x2,y2,n−1); }else { int ix1 = myWorld.xToPix(x1); int iy1 = myWorld.yToPix(y1); int ix2 = myWorld.xToPix(x2); int iy2 = myWorld.yToPix(y2); drawSegment(ix1,iy1,ix2,iy2 ); }}
a Koch-görbe generálásánálminden lépésben a szakaszok hossza az eredeti 1/3-a lesza szakaszok száma az négyszereződik
négyzetes Koch-görbe
Sierpinski háromszögek
Sierpinski szőnyeg
hópelyhek villámlás baktérium kolóniák