E.7 - Generatività

Propagaciones

Obiettivo

Far generare un'immagine grafica o un'animazione definendo il comportamento e le modalità di visualizzazione di qualche centinaio di agenti autonomi.

Modalità

Il canvas dovrà avere una risoluzione di almeno 600x600 pixel e potrà essere anche rettangolare.

Il codice base potrebbe essere strutturato in questo modo:

// DEFINIZIONE DELLA CLASSE                           
function Agente( partenza ) {
    // proprietà
    this.pos = partenza.copy();
    this.vel = p5.Vector.random2D();
    // metodi
    this.display = function() {  // disegna agente
        ellipse( this.pos.x,this.pos.y, 9,9 );
    };
    this.update = function() {   // aggiorna proprietà
        if (this.pos.dist(centro) > 290) {
            this.vel.mult( -1 );
        }
        if (random() < 0.33) {
            this.vel.rotate( random(-0.4,0.4) );
        }
        this.pos.add( this.vel );
    };
}

// DATI GLOBALI                                       
var agenti = [];      // array degli agenti
var agentiMax = 500;  // numero massimo di agenti
var centro;

// INIZIALIZZAZIONI                                   
function setup() {
    createCanvas(600, 600);
    centro = createVector(width/2, height/2);
}

// DISEGNO DEI FOTOGRAMMI                             
function draw() {
    // aggiunta progressiva degli agenti
    if (random() < 0.2) {
        agenti.push( new Agente(centro) );
        if (agenti.length > agentiMax) {
            agenti.shift();
        }
    }
    // aggiornamento e disegno
    for (var i=0; i<agenti.length; ++i) {
        agenti[i].update();
        agenti[i].display();
    }
}

Su OpenProcessing si possono trovare uno sketch di base e due varianti:

Consegna

L'esercitazione andrà caricata nel gruppo "Esercitazione 7" della classroom: openprocessing.org/class/57250

Per maggiori informazioni sul caricamento delle esercitazioni si può consultare la pagina sull'uso di OpenProcessing.