xxxxxxxxxx
102
const r = 30; // radius
const s = 2; // speed
let tableSize;
let persons = [];
let newX = [];
let newY = [];
this.focus();
function setup() {
// tableSize = min(windowWidth, windowHeight);
createCanvas(windowWidth, windowHeight);
ellipseMode(RADIUS);
textAlign(CENTER, CENTER);
textStyle(NORMAL);
textSize(r);
noStroke();
for (let i = 0; i < 25; 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 > r && x < width - r && y > r && y < height - r) {
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 D, minD, minX, minY, k;
for (let i = 0; i < persons.length; i++) {
minD = 9999;
for (let j = 0; j < persons.length; j++) {
if(i != j) {
D = dist(persons[i].x, persons[i].y, persons[j].x, persons[j].y);
if (D < minD) {
minD = D;
minX = persons[j].x;
minY = persons[j].y;
}
}
}
k = s / D + 1;
newX[i] = minX - k * (minX - persons[i].x);
newY[i] = minY - k * (minY - persons[i].y);
}
}
function coordCopy() {
for (let i = 0; i < persons.length; i++) {
persons[i].x = newX[i];
persons[i].y = newY[i];
}
}
function placeColor(x, y) {
let c;
c = color(map(x, r, width - r, 255, 0),
map(x, r, width - r, 0, 255),
map(y, r, height - r, 0, 255));
return c;
}
function createPerson(x = 0, y = 0) {
if (x === 0) { x = random(r, width - r) }
if (y === 0) { y = random(r, height - r) }
let p = new Person(x, y);
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);
}
}
}