fractalkitty looking for math? fractalkitty.com

borbs ยท borbpacked

borb_packing

#random#trig#interactive#animation#accumulates#packing#animals

cArraycBooladdCircle

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();
}