fractalkitty looking for math? fractalkitty.com

early works

diatom1

#noise#random#trig#interactive#math#polar#parametric#nature

nLayersdiatdetNtentacle

let nLayers = 10,
  w;
let r = [];
let n = [];
function setup() {
  createCanvas(windowWidth, windowHeight);
}
function draw() {
  background(240, 240, 230);
  stroke(0, 50, 70);
  strokeWeight(0.1);
  noFill();
  w = min(width, height) / 1.5;
  angleMode(DEGREES);
  translate(width / 2, height / 2);
  detN();
  diat();
  noLoop();
}

function diat() {
  for (let i = 0; i < n[0]; i++) {
    push();
    rotate((360 / n[0]) * i);
    tentacle();
    pop();
  }
  noStroke();
  fill(240, 240, 230, 200);
  circle(0, 0, r[0]);
  stroke(0, 50, 70);
  strokeWeight(0.5);
  for (let j = 0; j < n[1] * 3; j++) {
    beginShape();
    for (let i = 0; i <= 360; i++) {
      x =
        ((r[0] - (j * n[1]) / 4) * sin(i) + 5 * sin(i * 5 * n[0])) / 2 +
        noise(x);
      y = (r[0] * cos(i)) / 2;
      for (let j = 0; j < 20; j++) {
        vertex(x, y);
      }
    }
    endShape();
  }
  strokeWeight(0.1);
  a = int(random(5, 9));
  b = int(random(4, 10));
  c = max(a - b, 2);
  noFill();
  for (let i = 0; i < 3600; i = i + 10) {
    x = ((c * r[0]) / 8) * cos(i) + (r[0] / 8) * cos((c / b) * i) + noise(x);
    y = ((c * r[0]) / 8) * sin(i) - (r[0] / 8) * sin((c / b) * i);
    circle(x + 2 * noise(x), y, a / 2);
    circle(x + 2 * noise(x), y, a / 10);
  }
  p = int(random(2, 20));
  z = int(random(1, 4));
  for (let j = 0; j < n[2] * z; j++) {
    beginShape();
    for (let i = 0; i <= 360; i++) {
      x = ((r[1] - j * 5) * sin(i) + p * sin(i * p)) / 2;
      y = ((r[1] - j * 5) * cos(i)) / 2;
      for (let j = 0; j < 20; j++) {
        vertex(x, y);
      }
    }
    endShape();
  }
  strokeWeight(1);
  g = int(random(60, 180));
  for (let i = 0; i < n[3] * 2; i++) {
    push();
    rotate((360 / (n[3] * 2)) * i);
    for (let j = 0; j < g; j++) {
      x = (r[3] * sin(j) * cos(j / 2)) / 2 + 10 * noise(x);
      y = (r[3] * cos(j)) / 2;
      point(x, y);
    }
    pop();
  }
  strokeWeight(0.5);
  p = int(random(2, 20));
  for (let i = 0; i < n[4]; i++) {
    push();
    rotate((360 / n[4]) * i);
    for (let j = 0; j < p; j++) {
      ellipse(
        r[5] / 2 - j,
        0 - p - j / 2,
        10 - j - noise(x),
        10 - j - noise(y)
      );
    }
    pop();
  }
  strokeWeight(0.1);
  a = random(2, 3);
  b = random(3, 4);
  noFill();
  beginShape();
  for (let i = 0; i < 10000; i = i + 30) {
    x =
      (((a - b) * r[7]) / 7) * cos(i) +
      (r[7] / 7) * cos(((a - b) / b) * i) +
      noise(x);
    y = (((a - b) * r[7]) / 7) * sin(i) - (r[7] / 7) * sin(((a - b) / b) * i);
    vertex(x, y);
  }
  endShape();
  a = random(2, 3);
  b = random(10, 20);
  noFill();
  beginShape();
  for (let i = 0; i < 10000; i = i + 20) {
    x = ((a * r[8]) / b) * cos(i / b) * cos(i);
    y = ((a * r[8]) / b) * sin(i / b);
    vertex(x, y);
  }
  endShape();
}
function detN() {
  r = [];
  n = [];
  n[0] = int(random(3, 19));
  r[0] = w;
  nLayers = 10;
  for (let i = 1; i < nLayers; i++) {
    n[i] = int(random(3, 12));
    r[i] = r[i - 1] - int(random(5, r[i - 1] / 1.5)) / 2;
  }
}

function mousePressed() {
  setup();
  draw();
}

function tentacle() {
  k = int(random(20, 100));
  b = random(0.5, 1);
  for (i = 2; i < 360; i++) {
    x = k * sin(i / b);
    y = (w / 360) * i;
    for (let j = 0; j < 100; j++) {
      point(x + 20 * noise(x), y + noise(y));
    }
  }
}