Demonstrační aplikace pro vytváření fraktálů pomocí L-IFS systémů

Zdrojový text metody recalcFractal()

// ------------------------------------------------------------------------
// Tato metoda provede přepočet L-IFS fraktálu s využitím matice vrcholů a
// matice posloupnosti transformací.
// ------------------------------------------------------------------------
private void recalcFractal() {
    double  xo=5.0, yo=5.0;                     // stará pozice bodu
    double  x1, y1, x2, y2;                     // nová pozice bodu
    double  xf1, yf1, xf2, yf2;                 // poměr dělení úsečky
    int     newTransform=0;                     // nová transformace
    int     oldTransform=0;                     // stará transformace
    int     x, y;

    if (!isValidFractal()) return;              // zkontrolovat, zda jsou transformace korektní
    Random r=new Random(0);

    for (int i=0; i<ImageWidth*ImageHeight; i++)// smazat obrázek, kam bude fraktál vygenerován
        pixelSrc[i]=0xff << 24;

    xf1=xFraction;                              // výpočet koeficientu dělení úsečky
    xf2=1.0-xf1;
    yf1=yFraction;
    yf2=1.0-yf1;

    // vnější iterační smyčka
    for (int i=0; i<iterations; i++) {          // iterační smyčka

        // vnitřní smyčka pro nalezení transformace odpovídající matici posloupnosti transformací
        do {                                    // najít novou transformaci
            newTransform=(int)(r.nextDouble()*activeVertexes);
        } while (!restrictions[oldTransform][newTransform]);

        x1=vertexX[newTransform];               // získat polohu vybraného řídicího bodu
        y1=vertexY[newTransform];
        x2=xo;
        y2=yo;
        xo=x1*xf1+x2*xf2;                       // výpočet nové pozice bodu
        yo=y1*yf1+y2*yf2;
        if ((xo>=0) && (xo<=ImageWidth) &&      // pokud se nový bod nachází uvnitř obrázku
            (yo>=0) && (yo<=ImageHeight) &&
            (i>=startIterations)) {             // a překročili jsme počet startovních iterací
            x=(int)xo;
            y=(int)yo;
            pixelSrc[x+y*ImageWidth]=0xffffffff;// vykreslit nový bod do obrázku
        }
        oldTransform=newTransform;
    }
    applyFilter();                              // aplikace vybraného filtru
    image.flush();                              // a vykreslení obrázku na plochu appletu
}

// ------------------------------------------------------------------------
// Konec metody recalcFractal()
// ------------------------------------------------------------------------