Morphing di poligoni

// height=200 lines=auto
let verticiA = [];  // vertici poligono iniziale
let verticiB = [];  // vertici poligono finale

function setup() {
   createCanvas(200,200);
   // crea vettori dei vertici
   for (let i=0;  i<6;  ++i) {
      let vA = createVector(random(width), random(height));
      verticiA[i] = vA;
      let vB = createVector(random(width), random(height));
      verticiB[i] = vB;
   }
}

function draw() {
   // visualizza l'interpolazione
   background(220);
   let t = norm( sin(frameCount/50), -1,1 );
   beginShape();
   for (let i=0;  i<verticiA.length;  ++i) {
      let interpolato = p5.Vector.lerp( verticiA[i], verticiB[i], t );
      vertex( interpolato.x, interpolato.y );
   }
   endShape(CLOSE);
}
let t = norm( sin(frameCount/50), -1,1 );

Normalizza un valore con andamento sinusoidale dipendente da frameCount: il valore di t oscillerà ciclicamente fra 0 e 1 anziché fra -1 e 1.

let interpolato = p5.Vector.lerp( verticiA[i], verticiB[i], t );

Calcola il vertice interpolato fra verticiA e verticiB alla posizione t.