fractalkitty looking for math? fractalkitty.com

Mathober 2024

lie

#trig#grid#color#text#animation#math#geometry#mathober

bgColgColnGridgSpacepisanoPeriodsequencedrawGrid


const bgCol = "#447abd";
const gCol = "#a2c2e8";
const nGrid = 20;
let w;
let gSpace;

function setup() {
  w = max(400, min(windowWidth, windowHeight) * 0.9);
  gSpace = (w / nGrid) * 0.95;
  describe("dynkin diagrams on a blueprint");
  createCanvas(w, w);
  rectMode(CENTER);

  d = w;
  angleMode(DEGREES);
  textSize(16);
  m = 7;
  s = [];
  s = pisanoPeriod(m);
  g = (w - 2 * gSpace) / 2 / 300;
}

function draw() {
  background(bgCol);
  translate(w / 2, w / 2);
  drawGrid();
  t = frameCount / 3;
  stroke(255);
  strokeWeight(3);
  noFill();
  n1 = 12;
  for (let i = 1; i <= n1; i++) {
    push();
    rotate((360 / n1) * i + t + 100 * sin((t * i) / 10));
    circle(-gSpace * 7, 0, gSpace * 2);
    circle(-gSpace * 3, 0, gSpace * 2);
    circle(gSpace * 7, 0, gSpace * 2);
    circle(gSpace * 3, 0, gSpace * 2);
    drawingContext.setLineDash([gSpace, 0]);
    line(-gSpace * 6, 0, -gSpace * 4, 0);
    line(gSpace * 6, 0, gSpace * 4, 0);
    drawingContext.setLineDash([gSpace / 12, gSpace / 2]);
    line(-gSpace * 2, 0, gSpace * 2, 0);
    pop();
  }

  fill(255, 255, 255, 20);
  noStroke();
  fill(gCol);
  text("lie", -w / 2 + 10, w / 2 - 5);
}

function pisanoPeriod(m) {
  if (m <= 0) return [];
  if (m === 1) return [0];

  let sequence = [];
  let a = 0;
  let b = 1;

  do {
    sequence.push(a);
    let c = (a + b) % m;
    a = b;
    b = c;
  } while (!(a === 0 && b === 1) || sequence.length < 2);

  return sequence;
}

function drawGrid() {
  stroke(gCol);
  strokeWeight(0.3);
  for (let i = 1; i <= nGrid; i++) {
    for (let j = 1; j <= nGrid; j++) {
      line(
        -w / 2 + gSpace * i,
        -w / 2 + gSpace,
        -w / 2 + gSpace * i,
        w / 2 - gSpace
      );
      line(
        -w / 2 + gSpace,
        -w / 2 + gSpace * i,
        w / 2 - gSpace,
        -w / 2 + gSpace * i
      );
    }
  }
  noFill();
  strokeWeight(3);
  rect(0, 0, w - 2 * gSpace);
}