Un oggetto che sembra vivo

Basta un solo oggetto che cambia all’improvviso direzione e velocità, senza una causa visibile, perché venga percepito come vivo, come se si muovesse per sua intenzione. Gli scienziati cognitivi Patrice Tremoulet e Jacob Feldman lo hanno misurato nel 2000: l’impressione di vita (animacy) cresce con l’ampiezza dei cambiamenti e quando una forma allungata è orientata nella direzione del movimento.

    let x = 335;        // posizione
let y = 120;
let angolo = 0;     // direzione del movimento
let velocita = 2;   // pixel per fotogramma

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

function draw() {
    background( 255 );
    if (random() < 0.02) {
        angolo += random( -1.5, 1.5 );
        velocita = random( 0.5, 4 );
    }
    x = (x + cos( angolo ) * velocita + width) % width;
    y = (y + sin( angolo ) * velocita + height) % height;
    translate( x, y );
    rotate( angolo );
    line( -15, 0, 15, 0 );
}
  

Algoritmo

a ogni fotogramma:                                                draw()
    ogni tanto, a caso:                                           random()
        cambiare di colpo la direzione
        scegliere una nuova velocità
    avanzare nella direzione attuale                              cos() sin()
    se esce dalla tela, rientrare dal lato opposto                %
    girare il segmento nella direzione del movimento              rotate()
    disegnarlo

Istruzioni


  

In media una volta ogni 50 fotogrammi, poco meno di un secondo, la direzione gira di un angolo casuale fino a 1.5 radianti, circa 86 gradi, da una parte o dall’altra.


  

cos() e sin() scompongono lo spostamento nella direzione angolo in una parte orizzontale e una verticale. Il resto della divisione per la larghezza fa rientrare da sinistra il segmento che esce a destra, e aggiungere width prima della divisione fa lo stesso con quello che esce a sinistra, che altrimenti avrebbe una x negativa. In verticale succede lo stesso con l’altezza.

Variazioni

Con 0 al posto di 0.02 il rettangolo non cambia mai direzione né velocità, e sembra un oggetto lanciato.

Con circle( 0, 0, 12 ) al posto di line() non si vede più l’orientamento, e l’impressione di vita si indebolisce.