fractalkitty looking for math? fractalkitty.com

Coded Poems

mathober day-18: Regression

#random#trig#vectors#image#interactive#animation#accumulates#poem#math#mathober

img1img2starsstars2nStarsdrawStars


let img1, img2;
let stars;
let stars2;
let nStars = 50;

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

function setup() {
  createCanvas(600, 600);

  angleMode(DEGREES);
  stroke(255);
  imageMode(CENTER);
  stars = [];
  tmp2 = random(-2, 2);
  for (let i = 0; i < nStars; i++) {
    tmp = randomGaussian(0, width / 20);
    stars[i] = createVector(
      tmp,
      tmp * tmp2 + randomGaussian(0, 10),
      randomGaussian(20, 5)
    );
  }
  strokeWeight(0.5);
  stars2 = stars;
}

function draw() {
  translate(width / 2, height / 2);
  t1 = frameCount;

  sumX = 0;
  sumY = 0;
  sumXY = 0;
  sumX2 = 0;
  sumY2 = 0;

  for (let i = 0; i < nStars; i++) {
    stars[i].x = stars2[i].x + (stars[i].x * sin((t1 / stars[i].z) * 2)) / 1200;
    stars[i].y = stars2[i].y + ((stars[i].z + stars[i].y) * cos(t1)) / 1200;
  }

  for (let i = 0; i < stars.length; i++) {
    sumX = sumX + stars[i].x;
    sumY = sumY + stars[i].y;
    sumXY = sumXY + stars[i].x * stars[i].y;
    sumX2 = sumX2 + stars[i].x * stars[i].x;
    sumY2 = sumY2 + stars[i].y * stars[i].y;
  }

  b = (sumY * sumX2 - sumX * sumXY) / (nStars * sumX2 - sumX * sumX);
  m = (nStars * sumXY - sumX * sumY) / (nStars * sumX2 - sumX * sumX);

  x1 = -width / 2;
  y1 = m * x1 + b;
  x2 = width / 2;
  y2 = m * x2 + b;
  push();
  rotate(atan(m));
  image(img1, 0, 0, 900, 900);
  pop();
  line(x1, y1, x2, y2);
  drawStars();
}
function drawStars() {
  for (let i = 0; i < stars.length; i++) {
    image(img2, stars[i].x, stars[i].y, stars[i].z, stars[i].z);
  }
}

function mousePressed() {
  setup();
  draw();
}