/** * Flocking -- New Mexico Super Computing Challenge 2008 * by Joshua Thorp * */ long steps = 0; int initialNumberOfBoids = 100; Boids boids; float boidSize = 15; float avoidanceRadius; float neighborhoodRadius; float outsideAvoidanceZone = 80; float avoidanceRadiusInBoidSize = 3; float neighborhoodRadiusInBoidSize = 10; float mouseRadius = 60; float noiseWeight = 1.0; float avoidanceWeight = 1000.0; float centerWeight = 20.0; float alignWeight = 80.0; float mouseWeight = 1000.0; float oldWeight = 0.85; float minSpeed = 2.5; float maxSpeed = 2.51; static float epsilon = 0.00001; void setup() { //size(1680,1050); //size(1680/2,1050/2); size(1280,980); //size(1680/4,900); boids = new Boids(); updateNeighborhood(); } void updateNeighborhood() { avoidanceRadius = boidSize * avoidanceRadiusInBoidSize; neighborhoodRadius = boidSize * neighborhoodRadiusInBoidSize; } void draw() { if (drawbackground) { background(50); //draw non-discomfort zone fill(0); stroke(0); rect(outsideAvoidanceZone-boidSize/2,outsideAvoidanceZone-boidSize/2,width-1-outsideAvoidanceZone*2+boidSize, height-1-outsideAvoidanceZone*2+boidSize); } if (avoidmouse) { //If boids are avoid mouse, draw the avoidance mouse noFill(); stroke(0,255,0); ellipse(mouseX, mouseY, mouseRadius*2, mouseRadius*2); ellipse(mouseX, mouseY, mouseRadius/2, mouseRadius/2); } if (mousePressed) { //add a boid at the current mouse location boids.addBoid(new Vector(mouseX, mouseY)); } if (boids.size()