Interferenza di onde circolari

    function setup() {
    createCanvas( 670, 220 );
}

function draw() {
    let tempo = frameCount * 0.1;
    for (let py = 0;  py < height;  py++) {
        for (let px = 0;  px < width;  px++) {
            let dist1 = dist( px, py, 270, 110 );
            let dist2 = dist( px, py, 400, 110 );
            let onda1 = sin( dist1 * 0.25 - tempo );
            let onda2 = sin( dist2 * 0.25 - tempo );
            let grigio = map( onda1 + onda2, -2, 2, 0, 255 );
            set( px, py, grigio );
        }
    }
    updatePixels();
}
  

  

La distanza del pixel dalla prima sorgente, nel punto 270, 110.


  

Il valore dell’onda dipende dalla distanza dalla sorgente: i pixel alla stessa distanza formano un cerchio con lo stesso valore. tempo, che cresce con frameCount, sposta la fase a ogni fotogramma, e i cerchi si allontanano dalla sorgente.


  

La somma delle due onde, da -2 a 2, diventa un grigio. Dove le onde arrivano in fase il pixel passa dal nero al bianco, dove arrivano opposte si annullano, e il pixel resta grigio.

Le onde si muovono, mentre le linee grigie in cui si annullano restano ferme: è la figura di interferenza che si vede sulla superficie di uno stagno quando vi cadono due sassi vicini.

Cambiando 0.25 le onde si avvicinano o si allontanano. Si può anche cambiare la distanza fra le sorgenti, ad esempio spostando la prima in 200, 110.

Con mouseX, mouseY al posto di 400, 110 la seconda sorgente segue il mouse.

Sommando più onde con direzioni diverse si ottengono figure più complesse, come i Quasicrystals di Keegan McAllister.