fractalkitty looking for math? fractalkitty.com

Genuary 2022

Raking Sand

#random#trig#classes#interactive#animation#accumulates#genuary

modemultiRakerakeSandgetCoorrake

let mode = 0;
let multiRake = [];
let x, y;
function setup() {
  createCanvas(windowWidth, windowHeight);
  noStroke();
  angleMode(DEGREES);
  r1 = 237;
  g1 = 233;
  b1 = 209;
  frameCount = 0;
  background(r1, g1, b1);
  for (let i = 0; i < 50000; i++) {
    fill(r1 / 1.5, g1 / 1.5, b1 / 1.5);
    circle(random(0, width), random(0, height), 0.5);
    fill(r1 * 2, g1 * 2, b1 * 2);
    circle(random(0, width), random(0, height), 0.5);
    fill(r1, g1, b1);
    circle(random(0, width), random(0, height), 0.5);
  }
  multiRake.push(new rake(0, 0));
}

function draw() {
  console.log(mode);
  translate(width / 2, height / 2);
  t = frameCount;
  for (let i = 0; i < multiRake.length; i++) {
    push();
    translate(multiRake[i].x, multiRake[i].y);
    rakeSand();
    pop();
  }
}

function rakeSand() {
  for (let i = 0; i < 32; i++) {
    if (i % 3 === 0) {
      c = 20;
    } else {
      c = 0;
    }
    fill(r1 - c, g1 - c, b1 - c);
    getCoor(height / 4 - i * 4);
    circle(x + random(-1, 1), y + random(-1, 1), 4);
    fill(r1 / 2, g1 / 2, b1 / 2);
    circle(x + random(-1, 1), y + random(-1, 1), 0.5);
    fill(r1 * 2, g1 * 2, b1 * 2);
    circle(x + random(-1, 1), y + random(-1, 1), 0.5);
  }
}

function getCoor(r) {
  if (mode === 0) {
    x = r * sin(t) * cos(t / 2);
    y = r * cos(t);
  }
  if (mode === 1) {
    x = r * sin(t);
    y = r * cos(t);
  }
  if (mode === 2) {
    x = r * sin(t) * cos(t / 2);
    y = r * cos(t / 2);
  }
  if (mode === 3) {
    x = r * sin(t) * cos(t / 3);
    y = r * cos(t) * cos(t / 3);
  }
  if (mode === 4) {
    x = ((t % width) / 2) * sin(t) - (r / 2) * cos(t / 3);
    y = r * cos(t) * cos(t / 3);
  }
  if (mode === 5) {
    x = r * sin(t) - (r / 2) * cos(t / 3);
    y = r * cos(t) * sin(t / 4);
  }
  if (mode === 6) {
    x = r * sin(t) - 5 * cos(t * 4);
    y = r * cos(t) - 5 * sin(t * 4);
  }
  if (mode === 7) {
    x = r * sin(t) - 2 * cos(t * 20);
    y = r * cos(t) - 2 * sin(t * 20);
  }
  if (mode === 8) {
    x = r * sin(t) - (r / 4) * cos(t / 2);
    y = r * cos(t) - 2 * sin(t * 20);
  }
  if (mode === 9) {
    x = r * sin(t) * cos(-t) - (r / 4) * sin(t / 2) * cos(t);
    y = r * cos(t) * cos(t) - (r / 4) * cos(t / 2);
  }
  if (mode === 10) {
    x = r * sin(t) * cos(-t) - (r / 4) * sin(t / 2) * cos(t);
    y = r * cos(t) * sin(t / 3) - (r / 3) * cos(t);
  }
  if (mode === 11) {
    x = r * sin(t) * cos(-t) - (r / 3) * sin(t / 5) * cos(t);
    y = r * cos(t) * sin(t / 3) - (r / 3) * cos(t / 8);
  }
  if (mode === 12) {
    x = -width / 2 + (t % width);
    y = r * cos(t) * sin(t / 3) - (r / 3) * cos(t / 8);
  }
  if (mode === 13) {
    x = (-width / 2 + (t % width)) * cos(t);
    y = r * cos(t) * sin(t / 3) - (r / 3) * cos(t / 8);
  }
  if (mode === 14) {
    x = ((r / 4 + t / 10) % (width / 3)) * cos(t);
    y = ((r / 4 + t / 10) % (width / 3)) * sin(t);
  }
  if (mode === 15) {
    x = ((r / 4 + t / 10) % (width / 3)) * cos(t / 2);
    y = ((r / 4 + t / 10) % (width / 3)) * sin(t);
  }
  if (mode === 16) {
    x = ((r / 4 + t / 10) % (width / 3)) * cos(t) * sin(t / 2);
    y = r * sin(t);
  }
  if (mode === 17) {
    x = ((r / 4 + t / 10) % (width / 3)) * cos(t) * sin(t / 2);
    y = r * cos(t) - (r / 4) * sin(t);
  }
  if (mode === 18) {
    x = (r / 4) * cos(t) * sin(t / 2) + (r / 2) * sin(t / 10) - r * tan(t);
    y = r * cos(t) - (r / 4) * sin(t);
  }
  if (mode === 19) {
    x = -r * cos(t) - (r / 5) * sin(t / 2);
    y = r * sin(t) - (r / 4) * tan(t / 4);
  }
  if (mode === 20) {
    x = -r * cos(t) - (r / 5) * tan(t / 3);
    y = r * sin(t) - (r / 5) * tan(t / 4);
  }
  if (mode === 21) {
    x = mouseX - width / 2 + r * sin(t);
    y = mouseY - height / 2 + r * cos(t);
  }
}

function keyPressed() {
  if (keyCode === 32) {
    multiRake = [];
    setup();
  }
  if (keyCode === 38) {
    if (mode <= 20) {
      mode++;
      multiRake = [];
      setup();
    } else {
      mode = 0;
      multiRake = [];
      setup();
    }
  }

  if (keyCode === 40) {
    if (mode > 0) {
      mode--;
      multiRake = [];
      setup();
    } else {
      mode = 21;
      multiRake = [];
      setup();
    }
  }
}

function mousePressed() {
  multiRake.push(new rake(mouseX - width / 2, mouseY - height / 2));
}

class rake {
  constructor(x, y) {
    this.x = x;
    this.y = y;
    this.mode = mode;
  }
}