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 deupdate()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
- Afegeix resistència de l'aire: una força proporcional i oposada a la velocitat (
let friccio = this.vel.copy().mult(-0.01)). - Crea un sistema de pluja amb vent que canvia aleatòriament cada pocs segons.
- Implementa un volcà: partícules que surten d'una obertura, amb gravetat forta i colors que van de taronja a negre.
- Dissenya un eixam de papallones: partícules amb ales (dues el·lipses) que bateguen, amb forces de vent suau i gravetat mínima.
- 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
Coetque puja amb gravetat, i una classeParticulaper 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à.