Tema 10

Sistemes de partícules (II)

Dona física a les teves partícules: aplica gravetat, vent i altres forces. Controla la mida i el color al llarg del temps per crear efectes més realistes i expressius.

Recordatori: la classe Particula del Tema 9

Partim d'una classe bàsica amb posició, velocitat i vida. Ara hi afegirem acceleració per respondre a forces, i personalitzarem la mida i el color amb el temps.

class Particula {
  constructor(x, y) {
    this.pos = createVector(x, y);
    this.vel = createVector(random(-1,1), random(-3,-1));
    this.vida = 255;
  }
  update() { this.pos.add(this.vel); this.vida -= 3; }
  show() { fill(255, 200, 100, this.vida); ellipse(this.pos.x, this.pos.y, 10, 10); }
}

Força i acceleració: la segona llei de Newton

En física, una força (com la gravetat o el vent) provoca una acceleració que canvia la velocitat. En codi: velocitat += acceleració i posició += velocitat.

class Particula {
  constructor(x, y) {
    this.pos = createVector(x, y);
    this.vel = createVector(0, 0);
    this.acc = createVector(0, 0.05); // gravetat suau
    this.vida = 255;
  }
  update() {
    this.vel.add(this.acc);
    this.pos.add(this.vel);
    this.vida -= 2;
  }
}

Vent variable i múltiples forces

Podem crear un vent que canviï de direcció i intensitat. En lloc de fixar l'acceleració al constructor, podem calcular forces noves a cada update() o rebre-les des de fora.

let vent = createVector(0.1, 0);

function draw() {
  vent.x = map(mouseX, 0, width, -0.2, 0.2);
  particules.push(new Particula(random(width), height));
  for (let p of particules) {
    p.aplicarForca(vent);
    p.update();
    p.show();
  }
}

Mida variable: créixer o encongir-se

Una partícula pot canviar de mida segons la seva edat. Per exemple, una espurna que s'apaga es fa més petita.

show() {
  let mida = map(this.vida, 0, 255, 0, this.midaMax);
  fill(255, 150, 0, this.vida);
  ellipse(this.pos.x, this.pos.y, mida, mida);
}

Color dinàmic: transicions cromàtiques

El color també pot evolucionar amb l'edat de la partícula. Podem fer que una flama passi de groc a vermell.

show() {
  let to = map(this.vida, 0, 255, 0, 60);
  let sat = map(this.vida, 0, 255, 100, 60);
  let bri = map(this.vida, 0, 255, 100, 80);
  fill(to, sat, bri, this.vida);
  ellipse(this.pos.x, this.pos.y, 12, 12);
}

Focs artificials amb forces, mida i color

Combinem tots els conceptes: una partícula "coet" puja amb gravetat, explota i genera partícules filles.

class Coet {
  update() { this.vel.add(0, 0.08); this.pos.add(this.vel); }
  morta() { return this.vel.y >= 0; }
  explota(arr) {
    for (let i=0; i<30; i++) {
      let vel = p5.Vector.random2D().mult(random(1,4));
      arr.push(new ParticulaFilla(this.pos.x, this.pos.y, vel));
    }
  }
}

Consells per a forces i transicions

  • Reseteja l'acceleració cada frame: this.acc.mult(0) al final de update() per no acumular forces indefinidament.
  • Utilitza p5.Vector.random2D() per a direccions aleatòries uniformement distribuïdes (explosions).
  • Limita la velocitat màxima amb this.vel.limit(max) per evitar partícules massa ràpides.
  • Interpola amb map() per a canvis suaus de mida i color.
  • Experimenta amb el nombre de partícules: un fons molt transparent (alfa 10-30) crea rastres llargs.

Exercicis per practicar

  1. Afegeix resistència de l'aire: una força proporcional i oposada a la velocitat (let friccio = this.vel.copy().mult(-0.01)).
  2. Crea un sistema de pluja amb vent que canvia aleatòriament cada pocs segons.
  3. Implementa un volcà: partícules que surten d'una obertura, amb gravetat forta i colors que van de taronja a negre.
  4. Dissenya un eixam de papallones: partícules amb ales (dues el·lipses) que bateguen, amb forces de vent suau i gravetat mínima.
  5. Repte: Crea un generador d'univers: clicant a diferents llocs, neixen estrelles amb partícules que orbiten al voltant d'un centre.

Reflexió artística

Afegir forces a les partícules és com donar-los personalitat. La gravetat les arrela a la terra, el vent les fa ballar, la resistència les suavitza. Com a artista-programador, pots simular des de la caiguda d'una fulla fins a l'explosió d'una supernova. La combinació de forces, mida i color converteix un simple punt en un element narratiu: una brasa que s'apaga, una llàgrima que cau, un estel fugaç. Ara que domines les partícules, el teu llenç digital és un univers viu. Experimenta, combina i crea mons efímers.

Mini-projecte del Tema 10

Crea un "Espectacle de focs artificials personalitzat" amb les següents condicions:

  • Defineix una classe Coet que puja amb gravetat, i una classe Particula per a les espurnes.
  • Els coets exploten en diferents formes: circular, en estrella, en anell.
  • Les partícules filles han de canviar de color i de mida al llarg de la seva vida.
  • Implementa almenys dues forces: gravetat i una altra (vent, fregament, o una força cap a un punt).
  • Fes que l'espectacle s'activi amb el ratolí: clicant es llança un coet des de baix cap a la posició del cursor, i explota allà.