// ----------------------------------------------------------------------- // Vlastní aplikace třetího algoritmu difúze // ----------------------------------------------------------------------- private void applyDiffuse() { boolean doneInnerLoop; int counter=0; int points=0; int xi, yi; int y; int boxStart=(width-boxWidth)>>1; // smyčka, pomocí které projde posuvný box postupně všemi řádky // v pomocné rastrové mřížce for (yi=height-boxHeight-1; yi>1; yi--) { // nastavit příznak ukončení vnitřní smyčky doneInnerLoop=false; // najít v posuvném boxu alespoň jeden bod, který přísluší // ke vznikajícímu fraktálnímu objektu // (maximální počet bodů je uložen v proměnné maxPoints) for (int point=0; point<maxPoints; point++) { do { // vygenerovat bod na náhodné pozici v posuvném boxu xi=(int)(Math.random()*(double)(boxWidth)+boxStart); y=(int)(Math.random()*(double)(boxHeight)); // pokud se vygenerovaný bod dotkl stávajícího objektu if (neighboor(neighboorType, xi, y+yi)) { putPoint(xi, y+yi); // přidat bod k objektu doneInnerLoop=true; // a nastavit příznak zpracování points++; break; } } while (!doneInnerLoop); counter++; if (counter==50) { // průběžný výpis práce programu label.setText("Points: "+String.valueOf(points)+" y: "+String.valueOf(yi)); counter=0; } // end if } // end for point } // end for } // ----------------------------------------------------------------------- // Konec metody applyDiffuse(). // -----------------------------------------------------------------------
Zpět na úvodní stránku demonstračního příkladu Diffuse3