fractalkitty looking for math? fractalkitty.com

all

magnetic configuration

#trig#grid#3d#interactive#animation#puzzle#math#geometry

magnettile

let u;
let c1, c2;
function setup() {
  createCanvas(600, 600, WEBGL);
  rectMode(CENTER);
  strokeWeight(0.5);
  c1 = color(250, 100, 100, 255);
  c2 = color(100, 100, 250, 255);
  u = 10;
}

function draw() {
  t = frameCount / 100;
  scale(0.9);

  orbitControl();
  background(255);
  noFill();
  for (let a = 0; a < 5; a++) {
    for (let b = 0; b < 5; b++) {
      push();

      translate(
        -width / 2 + u * 6 + 12 * u * a,
        -width / 2 + 12 * u * b + u * 6
      );
      rotateX(PI * sin(((a + 1) * t) / 10));
      rotateY(PI * sin(((b + 1) * t) / 10));
      tile();
      pop();
    }
  }
}

function magnet(i) {
  if (i === 0) {
    push();
    fill(c1);
    translate(0, 0, u / 4);
    box((3 / 8) * u, 3 * u, u / 2);
    fill(c2);
    translate(0, 0, -u / 2);
    box((3 / 8) * u, 3 * u, u / 2);
    pop();
  }
  if (i === 1) {
    push();
    fill(c2);
    translate(0, 0, u / 4);
    box((3 / 8) * u, 3 * u, u / 2);
    fill(c1);
    translate(0, 0, -u / 2);
    box((3 / 8) * u, 3 * u, u / 2);
    pop();
  }
  if (i === 2) {
    push();
    fill(c2);
    translate(0, 0, u / 4);
    box(3 * u, (3 / 8) * u, u / 2);
    fill(c1);
    translate(0, 0, -u / 2);
    box(3 * u, (3 / 8) * u, u / 2);
    pop();
  }
  if (i === 3) {
    push();
    fill(c1);
    translate(0, 0, u / 4);
    box(3 * u, (3 / 8) * u, u / 2);
    fill(c2);
    translate(0, 0, -u / 2);
    box(3 * u, (3 / 8) * u, u / 2);
    pop();
  }
}

function tile() {
  push();
  translate(0, 0, -u / 2);
  rect(0, 0, 12 * u, 12 * u, 8, 8);
  translate(0, 0, u);
  rect(0, 0, 12 * u, 12 * u, 8, 8);
  pop();
  push();
  translate(6 * u - u / 4, 2.5 * u, 0);
  magnet(0);
  translate(0, -5 * u, 0);
  magnet(1);
  pop();
  push();
  translate(-6 * u + u / 4, 2.5 * u, 0);
  magnet(1);
  translate(0, -5 * u, 0);
  magnet(0);
  pop();
  push();
  translate(2.5 * u, -6 * u + u / 4, 0);
  magnet(2);
  translate(-5 * u, 0, 0);
  magnet(3);
  pop();
  push();
  translate(2.5 * u, 6 * u - u / 4, 0);
  magnet(3);
  translate(-5 * u, 0, 0);
  magnet(2);
  pop();
}