Inspiration
For my inspiration this week, I wanted to replicate the ants that always scurry around with each other and sometimes if they find food or something they want, they tend to move in a herd.
I first had the images on the background to represent dirt in some way and to have the ant image.
After the graphics aspect was done, I wanted to implement the actual motion and have the ants be represented as circles for now. I needed to work on two particular functions, separate and align.
For the separate function, I needed to create a vector and have the separation movement be coded within that vector.
separate(ants) { let steer = createVector(); let count = 0; for (let other of ants) { let d = dist( this.pos.x, this.pos.y, other.pos.x, other.pos.y ); if (other != this && d < this.desiredSeparation) //make sure the ant is not comparing with isteld and within certain distance { let diff = p5.Vector.sub(this.pos, other.pos); diff.normalize(); diff.div(d); steer.add(diff); count++; } } if (count > 0) { steer.div(count); } if (steer.mag() > 0) { steer.setMag(this.maxSpeed); steer.sub(this.vel); steer.limit(this.maxForce); } return steer; }
For the align function, it is the same structure as the separate function ,but we use addition instead of subtraction.
align(ants) { let sum = createVector(); let count = 0; let perceptionRadius = 50; for (let other of ants) { let d = dist( this.pos.x, this.pos.y, other.pos.x, other.pos.y ); if (other !== this && d < perceptionRadius) { sum.add(other.vel); count++; } } if (count > 0) { sum.div(count); sum.setMag(this.maxSpeed); let steer = p5.Vector.sub(sum, this.vel); steer.limit(this.maxForce); return steer; } else { return createVector(); } }
This was the output with circles and I wanted the head of my ant to always point the way in the direction it was going.
display() { push(); translate(this.pos.x, this.pos.y); rotate(this.vel.heading()); image(this.img, 0, 0, 15, 15); pop(); // circle(this.pos.x, this.pos.y, 10); }
This is my final output and I would want to add more interactivity next time by making the user have something ‘sweet’ as the mouse movement, so the ants move towards the mouse.