Simmetrie: rotazioni e riflessioni

    let seme;

function setup() {
    createCanvas( 670, 300 );
    seme = random( 1000 );
    background( 240 );
    translate( width/2, height/2 );
    for (let i=0;  i<4;  ++i) {
        motivo();
        push();
        scale( 1, -1 );
        motivo();
        pop();
        rotate( TWO_PI / 4 );
    }
}

function motivo() {
    randomSeed( seme );
    for (let n=0;  n<10;  ++n) {
        let x = random( 10, 120 );
        let y = random( 0, x/2 );
        circle( x, y, random( 3, 40 ) );
    }
}
  

  

Disegna dieci cerchi casuali in uno spicchio a destra. randomSeed() fa ripartire i numeri casuali dallo stesso seme, scelto in setup(), quindi ogni chiamata disegna lo stesso motivo.


  

Con una scala verticale di -1 l’asse y si capovolge, e il motivo viene disegnato riflesso rispetto all’asse x, come in uno specchio.


  

Dopo ogni coppia di motivi gli assi ruotano di un quarto di giro, e quattro rotazioni completano il cerchio, come in un caleidoscopio.

Con 6 o 10 ripetizioni, e TWO_PI / 6 o TWO_PI / 10, le coppie di motivi si sovrappongono.

Senza le istruzioni da push() a pop() resta la sola simmetria di rotazione.