fractalkitty looking for math? fractalkitty.com

Coded Poems

mathober day-29: exchange

#random#trig#vectors#classes#image#animation#accumulates#poem#mathober

img1img2goodsItem


let img1, img2;
let goods;
let cnt = 0;

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

function setup() {
  createCanvas(600, 600);
  background(0);
  strokeWeight(0.5);
  angleMode(DEGREES);
  stroke(80, 68, 97);
  imageMode(CENTER);
  fill(200, 200, 255, 10);
  noStroke();
  goods = [];
  nI = 15;
  r = 150;
  for (let i = 0; i < nI; i++) {
    goods.push(new Item(r * cos((i * 360) / nI), r * sin((i * 360) / nI), i));
  }
  n1 = floor(random(0, nI - 0.001));
  n2 = floor(random(0, nI - 0.001));
  p1 = createVector(goods[n1].x, goods[n1].y);
  p2 = createVector(goods[n2].x, goods[n2].y);
}

function draw() {
  translate(width / 2, height / 2);
  t = frameCount / 2;
  push();
  cnt++;
  rotate(-cnt / 40);
  image(img1, 0, 0, 900, 900);
  pop();
  strokeWeight(0.8);
  for (let i = 0; i < goods.length; i++) {
    for (let j = 0; j < goods[i].n + 1; j++) {
      stroke(205, 205, 255, 100 - j * 4);
      image(
        img2,
        goods[i].x + 10 * cos((j * 360) / (goods[i].n + 1) - cnt / 10),
        goods[i].y + 10 * sin((j * 360) / (goods[i].n + 1) - cnt / 10),
        30,
        30
      );
    }
  }
  for (let i = 0; i < goods.length; i++) {
    for (let j = 0; j < 10 + 1; j++) {
      push();
      stroke(255, 255, 255, 100 - j * 4);
      scale(1 - j * 0.1);
      circle(goods[i].x, goods[i].y, 50 - j * 2);
      pop();
    }
  }
  if (t % 100 === 0) {
    n1 = floor(random(0, nI - 0.001));
    n2 = floor(random(0, nI - 0.001));

    p1 = createVector(goods[n1].x, goods[n1].y);
    p2 = createVector(goods[n2].x, goods[n2].y);
    frameCount = 0;
  }
  if (n1 === n2) {
    p1 = createVector(goods[n1].x, goods[n1].y);
    goods[n1].x = p1.x + (r / 100) * sin((t * 360) / 100);
    goods[n1].y =
      p1.y + (r / 100) * cos((t * 360) / 100) * sin((t * 360) / 100);
  } else {
    goods[n1].x = p1.x - ((p1.x - p2.x) / 100) * (t % 100);
    goods[n1].y = p1.y - ((p1.y - p2.y) / 100) * (t % 100);
    goods[n2].x = p2.x + ((p1.x - p2.x) / 100) * (t % 100);
    goods[n2].y = p2.y + ((p1.y - p2.y) / 100) * (t % 100);
  }
}

class Item {
  constructor(x, y, n) {
    this.x = x;
    this.y = y;
    this.n = n;
  }
}