fractalkitty looking for math? fractalkitty.com

Genuary 2024

our paths are but structure

#random#trig#3d#interactive#animation#accumulates#genuary

border


function setup() {
  createCanvas(500, 500, WEBGL);
  rectMode(CENTER);
  angleMode(DEGREES);
  noStroke();
  n = floor(random(3, 5));
  background(0);
  d1 = random(30, 50);
  d2 = random(5, 40);
  nRot = floor(random(3, 10));
  if (nRot === 4) {
    nRot = 3;
  }
  r1 = random(100, 255);
  g1 = random(100, 255);
  b1 = random(100, 255);
  r2 = random(20, 50);
  g2 = random(20, 50);
  b2 = random(20, 50);
}

function draw() {
  t = frameCount / (3 + n);
  pointLight(
    r1 + r2 * sin(t),
    g1 + g1 * sin(t),
    b1 + b2 * sin(t),
    600,
    600,
    600
  );
  specularMaterial(255, 255, 255);

  for (let j = 0; j < nRot; j++) {
    push();

    rotateZ((j * 360) / nRot);
    translate(d1, d1, d1);

    for (let i = 0; i < n; i++) {
      x =
        (n - 2) * d1 * sin(t + (360 / n) * i) +
        (n - 1) *
          d1 *
          sin((n - 1) * (t + (360 / n) * i)) *
          cos(t + (360 / n) * i);
      y =
        (n - 2) * d1 * cos(t + (360 / n) * i) -
        (n - 1) *
          d1 *
          cos((n - 1) * (t + (360 / n) * i)) *
          sin(t + (360 / n) * i);
      z = -(n - 2) * sin(n * (t + (360 / n) * i));
      push();
      translate(x, y, z);
      rotateY(45);
      rotateZ(-20);
      box(d2 / 2, d2 / 2, d2 / 2);
      pop();
    }
    pop();
  }
}

function border() {
  noFill();
  stroke(20, 50, 60);
  strokeWeight(4);
  rect(0, 0, width - 20, height - 20);
}

function mousePressed() {
  frameCount = 0;
  setup();
  draw();
}

function keyPressed() {
  trails = !trails;
}

function windowResized() {
  resizeCanvas(windowWidth * 0.9, windowHeight * 0.9);
}