xxxxxxxxxx
127
const r = 40; // radius
const s = 2; // speed
let persons = [];
let newX = [];
let newY = [];
this.focus();
function setup() {
createCanvas(windowWidth, windowHeight);
ellipseMode(RADIUS);
textAlign(CENTER, CENTER);
textStyle(NORMAL);
textSize(r);
noStroke();
for (let i = 0; i < 6; i++) { createPerson() }
}
function mousePressed() {
let x = mouseX;
let y = mouseY;
for (let i = 0; i < persons.length; i++) {
if (persons[i].contains(x, y)) {
persons.splice(i, 1);
return;
}
}
if (x > 0 && x < width && y > 0 && y < height) { createPerson(x, y) }
}
function draw() {
background(0);
proximity();
coordCopy()
for (let p of persons) {
p.move();
p.show();
}
}
function proximity () {
if (persons.length == 1) { newX[0] = persons[0].x; newY[0] = persons[0].y; return; }
let ix, iy, jx, jy;
let D, DW, DE, DN, DS, DNW, DNE, DSW, DSE;
let minD, minX, minY, k;
for (let i = 0; i < persons.length; i++) {
ix = persons[i].x;
iy = persons[i].y;
minD = 9999;
for (let j = 0; j < persons.length; j++) {
jx = persons[j].x;
jy = persons[j].y;
if(i != j) {
D = dist(ix, iy, jx, jy);
if (D < minD) { minD = D; minX = jx; minY = jy; }
DW = dist(ix, iy, jx - width, jy);
if (DW < minD) { minD = DW; minX = jx - width; minY = jy; }
DE = dist(ix, iy, jx + width, jy);
if (DE < minD) { minD = DE; minX = jx + width; minY = jy; }
DN = dist(ix, iy, jx, jy - height);
if (DN < minD) { minD = DN; minX = jx; minY = jy - height; }
DS = dist(ix, iy, jx, jy + height);
if (DS < minD) { minD = DS; minX = jx; minY = jy + height; }
DNW = dist(ix, iy, jx - width, jy - height);
if (DNW < minD) { minD = DNW; minX = jx - width; minY = jy - height; }
DNE = dist(ix, iy, jx + width, jy - height);
if (DNE < minD) { minD = DNE; minX = jx + width; minY = jy - height; }
DSW = dist(ix, iy, jx - width, jy + height);
if (DSW < minD) { minD = DSW; minX = jx - width; minY = jy + height; }
DSE = dist(ix, iy, jx + width, jy + height);
if (DSE < minD) { minD = DSE; minX = jx + width; minY = jy + height; }
}
}
k = s / D + 1;
newX[i] = minX - k * (minX - ix);
newY[i] = minY - k * (minY - iy);
}
}
function coordCopy() {
for (let i = 0; i < persons.length; i++) {
persons[i].x = newX[i];
persons[i].y = newY[i];
}
}
function createPerson(x = 0, y = 0) {
if (x === 0) { x = random(r, width - r) }
if (y === 0) { y = random(r, height - r) }
let c = color(random(100, 255), random(100, 255), random(100, 255));
let p = new Person(x, y, c);
persons.push(p);
}
function keyPressed() {
if (keyIsDown(ENTER)) {
for (let i = 0; i < persons.length; i++) {
persons[i].x += random(-r, r);
persons[i].y += random(-r, r);
}
}
if (keyIsDown(RIGHT_ARROW)) {
for (let i = 0; i < persons.length; i++) {
persons[i].x += r / 2;
}
}
if (keyIsDown(LEFT_ARROW)) {
for (let i = 0; i < persons.length; i++) {
persons[i].x -= r / 2;
}
}
if (keyIsDown(UP_ARROW)) {
for (let i = 0; i < persons.length; i++) {
persons[i].y -= r / 2;
}
}
if (keyIsDown(DOWN_ARROW)) {
for (let i = 0; i < persons.length; i++) {
persons[i].y += r / 2;
}
}
}