Druhá demonstrační aplikace pro simulaci difúze

Zdrojový text metody applyDiffuse()


// -----------------------------------------------------------------------
// Vlastní aplikace druhého algoritmu difúze, který je založen
// na připojování bodů generovaných náhodně v omezeném prostoru -
// - posuvné oblasti.
// -----------------------------------------------------------------------
private void applyDiffuse() {
    int      counter=0;                         // průběžně nulované počitadlo vygenerovaných bodů
    int      points=0;                          // počitadlo všech bodů
    int      xi, yi;                            // pozice bodů v posuvné oblasti
    int      y;                                 // relativní pozice v posuvné oblasti
    int      boxStart=(width-boxWidth)>>1;      // začátek vertikální pozice oblasti

    // posuvný box (oblast) postupně projde všemi řádky
    // v pomocné rastrové binární mřížce
    for (yi=height-boxHeight-1; yi>1; yi--) {

        // v posuvném boxu se vždy musí generovat
        // konstantní počet bodů připojených k objektu
        for (int point=0; point<maxPointsInBox; point++) {

            // najít takový bod, který se dotkne již nakresleného
            // (vygenerovaného) obrazce
            do {
                // vygenerovat bod na náhodné pozici
                // v posuvné oblasti (boxu)
                xi=(int)(Math.random()*(double)(boxWidth)+boxStart);
                y=(int)(Math.random()*(double)(boxHeight));
            } while (!neighboor(neighboorType, xi, y+yi));

            // byl nalezen bod, který se dotýká fraktálního objektu
            putPoint(xi, y+yi);                 // připojit nalezený bod k obrazci
            points++;                           // zvýšit počitadlo vygenerovaných bodů
            counter++;
            if (counter==50) {                  // průběžný výpis práce programu do okna
                label.setText("Points: "+String.valueOf(points)+"  y: "+String.valueOf(yi));
                counter=0;
            }                                   // end if
        }                                       // end for point
    }                                           // end for yi
}

// -----------------------------------------------------------------------
// Konec metody applyDiffuse().
// -----------------------------------------------------------------------

Zpět na úvodní stránku demonstračního příkladu Diffuse2


Úvodní stránka se soupisem demonstračních příkladů