fractalkitty looking for math? fractalkitty.com

Coded Poems

mathober day-21: Cyclotomic

#random#trig#vectors#image#interactive#animation#poem#geometry#mathober

img1img2verticescyclotomicGraphmakeVconnections


let img1, img2;
let vertices = [];
let a;

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

function setup() {
  createCanvas(600, 600);
  points = [];
  nPolygons = int(random(4, 40));
  strokeWeight(0.25);
  angleMode(DEGREES);
  stroke(255);
  imageMode(CENTER);
}

function draw() {
  translate(width / 2, height / 2);
  t1 = frameCount / 5 + 3;
  a = sin(t1);
  makeV();
  background(0);
  rotate(-t1 / 20);
  image(img1, 0, 0, 800, 800);
  noFill();
  if (mouseIsPressed) {
    cyclotomicGraph();
  } else {
    beginShape();
    for (let i = 0; i <= int(t1); i++) {
      x = 180 * sin((360 / t1) * i);
      y = 180 * cos((360 / t1) * i);
      vertex(x, y);
      image(img2, x, y, 40, 40);
      line(x, y, 0, 0);
    }
    endShape();
  }
}
function cyclotomicGraph() {
  for (let i = 0; i < vertices.length; i++) {
    fill(255);
    image(img2, vertices[i].x, vertices[i].y, 30, 50);
  }

  for (let i = 0; i < 41; i++) {
    line(
      vertices[connections[i * 2] - 1].x,
      vertices[connections[i * 2] - 1].y,
      vertices[connections[i * 2 + 1] - 1].x,
      vertices[connections[i * 2 + 1] - 1].y
    );
  }
}
function makeV() {
  r1 = 180 + a * 50 * sin(t1);
  for (let i = 0; i < 5; i++) {
    vertices[i] = createVector(
      r1 * cos((360 / 5) * i + t1 / 2) + a * (r1 / 4) * sin(t1),
      r1 * sin((360 / 5) * i + t1 / 2) + a * (r1 / 4) * cos(t1)
    );
  }
  r2 = 100 + a * 50 * cos(t1);
  for (let i = 0; i < 5; i++) {
    vertices[i + 5] = createVector(
      r2 * cos((360 / 5) * i + 360 / 10 + a * (r2 / 4) * sin(t1)) -
        (r2 / 4) * sin(t1),
      r2 * sin((360 / 5) * i + 360 / 10 + a * (r2 / 4) * sin(t1)) -
        a * (r2 / 4) * cos(t1)
    );
  }
  r3 = 50 - a * 10 * sin(t1);
  for (let i = 0; i < 5; i++) {
    vertices[i + 10] = createVector(
      r3 * cos((360 / 5) * i + t1 / 3),
      r3 * sin((360 / 5) * i + t1 / 3)
    );
  }
  vertices[15] = createVector(0, 0);
}

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

let connections = [
  1,
  2,
  1,
  5,
  1,
  7,
  1,
  9,
  1,
  11,
  2,
  3,
  2,
  8,
  2,
  10,
  2,
  12,
  3,
  4,
  3,
  6,
  3,
  9,
  3,
  13,
  4,
  5,
  4,
  7,
  4,
  10,
  4,
  14,
  5,
  6,
  5,
  8,
  5,
  15,
  6,
  11,
  6,
  12,
  6,
  16,
  7,
  12,
  7,
  13,
  7,
  16,
  8,
  13,
  8,
  14,
  8,
  15,
  8,
  16,
  9,
  14,
  9,
  15,
  9,
  16,
  10,
  11,
  10,
  15,
  10,
  16,
  11,
  13,
  11,
  14,
  12,
  14,
  12,
  15,
  13,
  15
];