borbs ยท borbpacked
borb_packing
let n = 5,
d;
let cArray = [];
let cnt = 0;
let cBool = true;
function setup() {
createCanvas(windowWidth, windowHeight);
cArray[0] = [];
cArray[1] = [];
cArray[2] = [];
noStroke();
background(40);
fill(255);
translate(width / 2, height / 2);
d = min(width, height) - 20;
circle(0, 0, d);
fill(40);
translate(-width / 2, -height / 2);
}
function draw() {
fill(255);
translate(width / 2, height / 2);
d = min(width, height) - 20;
for (let i = 0; i < n; i++) {
addCircle(i);
}
}
function addCircle(s) {
cBool = true;
x = random(-d / 2, d / 2);
y = random(-d / 2, d / 2);
fill(40);
noFill();
c = 0;
a = dist(x, y, 0, 0);
b = 1000;
if (a <= d / 2) {
b = (d / 2 - a) * 2;
if (cnt === 0) {
cBool = true;
} else {
for (let i = 0; i < cnt; i++) {
cR = cArray[2][i] / 2;
k = dist(cArray[0][i], cArray[1][i], x, y);
c = 2 * (k - cArray[2][i] / 2);
b = min(b, c);
log("c", c, "b", b);
if (k - cR < 0) {
cBool = false;
}
}
}
} else if (a > d / 2) {
cBool = false;
}
if (cBool) {
fill(40);
circle(x, y, b);
stroke(255);
strokeWeight(b / 200);
push();
translate(x, y);
stroke(255);
noFill();
stroke(255);
arc(b / 1.3, 0, b, b, PI / 1.25, -PI / 1.25);
arc(-b / 1.3, 0, b, b, PI / 1.25 + PI, -PI / 1.25 + PI);
fill(255);
translate(-b / 22, 0);
beginShape();
for (let i = -0.715585; i <= 0.715; i = i + 0.03) {
x1 = (b / 18) * cos(i);
y1 = (b / 18) * sin(i);
vertex(x1, y1);
}
for (let i = 2.425; i < 3.8571; i = i + 0.05) {
x1 = (b / 18) * cos(i) + b / 12;
y1 = (b / 18) * sin(i);
vertex(x1, y1);
}
endShape();
fill(0);
pop();
fill(255);
circle(x - b / 8, y - b / 10, b / 13);
fill(0);
circle(x - b / 8, y - b / 10, b / 22);
fill(255);
circle(x - b / 8 + b / 90, y - b / 10 - b / 90, b / 70);
fill(255);
circle(x + b / 8, y - b / 10, b / 13);
fill(0);
circle(x + b / 8, y - b / 10, b / 22);
fill(255);
circle(x + b / 8 + b / 90, y - b / 10 - b / 90, b / 70);
stroke(0);
cArray[0][cnt] = x;
cArray[1][cnt] = y;
cArray[2][cnt] = b;
cnt++;
}
cBool = true;
}
function mousePressed() {
cArray = [];
cArray[0] = [];
cArray[1] = [];
cArray[2] = [];
cnt = 0;
d = 1000;
cBool = true;
setup();
draw();
}