Interpolazioni oscillanti

Per evitare salti nell'interpolazione è possibile intervenire sulla variabile di controllo t facendo in modo che il valore torni gradualmente a 0.0 anziché di colpo.

// height=100 lines=auto
let t = 0;
let tVel = 0.02;

let rosso;  // colore iniziale
let verde;  // colore finale

function setup() {
    rosso = color( 255,0,0 );
    verde = color( 0,255,0 );
}

function draw() {

    let interpolato = lerpColor( rosso, verde, t );
    background( interpolato );

    t += tVel;
    if (t < 0 || t > 1.0001) {
        tVel = -tVel;
        t += tVel * 2;
    }
}
if (t < 0 || t > 1.0001) {
    tVel = -tVel;

La velocità (tVel) viene invertita se t esce dai limiti minimo o massimo (inferiore a 0 o maggiore di 1.0001). Con tVel negativo l'interpolazione scenderà da 1.0 a 0.0.

t += tVel * 2;

Fa tornare indietro il valore di t di due volte in modo che rientri nei propri limiti senza mantenere però la posizione avuta prima di uscire.

Se non è necessario controllare le singole interpolazioni, il valore di t si può calcolare direttamente a partire da frameCount e senza usare una variabile globale. Il codice può quindi diventare più sintetico, anche se meno intuitivo per chi ha scarse conoscenze di matematica:

let rosso;  // colore iniziale
let verde;  // colore finale
function setup() {
    rosso = color( 255,0,0 );
    verde = color( 0,255,0 );
}
function draw() {
    let t = abs( (frameCount*0.02) % 2 - 1 );  // <======
    let interpolato = lerpColor( rosso, verde, t );
    background( interpolato );
}