createCanvas(1000, 1000);
colorMode(RGB, 1.0, 1.0, 1.0, 255);
background(1.0, 1.0, 1.0);
for (let i = 0; i < 10; i++) {
let c = color(1.0, 1.0, 0.0);
let pos = createVector(random(2 * margin, width - 2 * margin), random(2 * margin, height - 2 * margin));
let mom = createVector(0.0, 0.0);
agents[i] = new Agent(pos, mom, random(2.0, 7.0), c);
for (let i = 10; i < 20; i++) {
let c = color(1.0, 1.0, 1.0);
let pos = createVector(random(2 * margin, width - 2 * margin), random(2 * margin, height - 2 * margin));
let mom = createVector(0.0, 0.0);
agents[i] = new Agent(pos, mom, random(2.0, 7.0), c);
for (let i = 20; i < numAgents; i++) {
let c = color(0.0, 0.0, 0.0);
let pos = createVector(random(2 * margin, width - 2 * margin), random(2 * margin, height - 2 * margin));
let mom = createVector(0.0, 0.0);
agents[i] = new Agent(pos, mom, random(2.0, 7.0), c);
for (let i = 0; i < numAgents; i++) {
constructor(position, momentum, r, ellipseColor) {
if (this.q.x > width - margin && dp.x > 0) {
if (this.q.x < margin && dp.x < 0) {
if (this.q.y > height - margin && dp.y > 0) {
if (this.q.y < margin && dp.y < 0) {
let temp = this.diameter + random(-1, 1);
if (temp > 0.0 && temp < 4 * this.radius) {
ellipse(this.q.x, this.q.y, this.diameter, this.diameter);
let R = sqrt(-2 * log(random(1)));
let theta = 2 * PI * random(1);
return createVector(R * cos(theta), R * sin(theta));