fractalkitty looking for math? fractalkitty.com

Coded Poems

mathober day-22: Movable

#random#vectors#image#3d#interactive#animation#poem#geometry#mathober

img1img2facemodelsverticescreateModelcreateGeometry

let img1, img2;
let v = [];
let face = [];
let models;

function preload() {
  img1 = loadImage("/assets/movable.jpg");
  img2 = loadImage("/assets/star.png");
}

function setup() {
  createCanvas(600, 600, WEBGL);
  strokeWeight(1);
  angleMode(DEGREES);
  noStroke();
  vertices();
  f();
  models = [];

  for (let i = 0; i < face.length; i++) {
    models[i] = createModel(v[face[i].x], v[face[i].y], v[face[i].z]);
  }
}

function draw() {
  t1 = frameCount / 25;
  translate(-40, -40, -4);
  scale(0.7);
  background(0);

  texture(img1);
  ambientLight(255);
  pointLight(255, 255, 255, 600, 600, 600);
  push();
  rotateX(t1);
  rotateY(t1);
  rotateZ(t1);
  s = 5;
  for (let j = 0; j < v.length; j++) {
    push();
    translate(v[j].x * s, v[j].y * s, v[j].z * s);
    rotateX((j * t1) / 2);
    rotateY((j * t1) / 2);
    rotateZ((j * t1) / 2);
    for (let i = 0; i < models.length; i++) {
      model(models[i]);
    }
    pop();
  }
  pop();
  push();
  rotateX(90);
  rotateZ(90);
  scale(80);
  translate(-15, -10, -40);
  for (let i = 0; i < models.length; i++) {
    model(models[i]);
  }
  pop();

  orbitControl(0.5, 0.5, 0.5);
}
function vertices() {
  v = [];
  v[0] = createVector(25.4, 0, 101.6);
  v[1] = createVector(0, 50.8, 76.2);
  v[2] = createVector(50.8, 25.4, 50.8);
  v[3] = createVector(-50.8, -25.4, 50.8);
  v[4] = createVector(0, -50.8, 76.2);
  v[5] = createVector(-25.4, 0, 101.6);
  v[6] = createVector(0, 50.8, 25.4);
  v[7] = createVector(-25.4, 0, 0);
  v[8] = createVector(-50.8, 25.4, 50.8);
  v[9] = createVector(25.4, 0, 0);
  v[10] = createVector(50.8, -25.4, 50.8);
  v[11] = createVector(0, -50.8, 25.4);
}

function f() {
  face = [];
  face[0] = createVector(0, 2, 1);
  face[1] = createVector(3, 4, 5);
  face[2] = createVector(7, 8, 6);
  face[3] = createVector(6, 2, 9);
  face[4] = createVector(10, 0, 4);
  face[5] = createVector(1, 8, 5);
  face[6] = createVector(2, 6, 8);
  face[7] = createVector(11, 9, 10);
  face[8] = createVector(8, 7, 5);
  face[9] = createVector(9, 2, 0);
  face[10] = createVector(7, 3, 5);
  face[11] = createVector(10, 9, 0);
  face[12] = createVector(0, 1, 4);
  face[13] = createVector(5, 4, 1);
  face[14] = createVector(2, 8, 1);
  face[15] = createVector(4, 3, 10);
  face[16] = createVector(11, 10, 3);
  face[17] = createVector(6, 9, 11);
  face[18] = createVector(11, 7, 6);
  face[19] = createVector(3, 7, 11);
}

function createModel(p1, p2, p3) {
  return new p5.Geometry(
    1,
    1,
    function createGeometry() {
      this.vertices.push(
        new p5.Vector(p1.x, p1.y, p1.z),
        new p5.Vector(p2.x, p2.y, p2.z),
        new p5.Vector(p3.x, p3.y, p3.z)
      );

      this.uvs.push([0.28, 0]);
      this.uvs.push([0.87, 0.43]);
      this.uvs.push([0.62, 1.0]);

      this.faces.push([0, 1, 2]);

      this.computeNormals();

      this.gid = str(random(10));
    }
  );
}