Concepts:
For this week’s assignment, I tried to implement a cloud of particles, each inspired by Craig Reynolds’s autonomous agents, that seek invisible and randomly generated vertices. I wanted to see how these agents work together, figure out the best path, and adapt to the changing environment. In terms of technicalities, I’m using a seek function and acceleration to drift toward the vertices one by one, and the HSB color mode for aesthetics.
Sketch:
Process:
Code Walkthrough:
Vehicle Class:
The vehicle class represents the autonomous agents (cloud of particles), and has one movement function alongside the constructor. It uses position, velocity, acceleration, direction, and color properties.
Move():
The move() function combines the seeking force and other helper functions (finding the next vertex index, checking if the particle reaches the vertex, changing direction)
move() { // Go to the next vertex let target = this.vertices[this.idx]; let distance = dist(this.position.x, this.position.y, target.x, target.y); if (distance < 45) { if ((this.direction==1 && this.idx==this.vertices.length-1) || (this.direction==-1 && this.idx==0)) { this.direction*= -1; } this.idx+=this.direction; } // Seek the next vertex if (distance >1) { let steer = new p5.Vector(target.x, target.y); steer.sub(this.position); steer.normalize(); steer.mult(0.045); this.acceleration.add(steer); } // Add movement this.velocity.mult(0.99); this.velocity.add(this.acceleration); this.velocity.limit(6); this.position.add(this.velocity); this.acceleration.mult(0); }
Upon every mouseclick, 1000 new particles are generated and the vertices change as well.
Vertices:
To generate the vertices, I’m using a random function:
vertices=[]; for (let i = 0; i < 6; i++) { let x = map(i, 0, 6, width/4, width - width/4); let y = random(120, height - 120); vertices.push(new p5.Vector(x, y)) }
HSB Color Mode:
I’m using the Hue specifically and brightness to add an aesthetic look to the particles.
Next Steps:
Future steps would be to add other forces i.e. avoiding obstacles.