view graphics/index.js @ 71:75de5903355c

Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
author June Park <parkjune1995@gmail.com>
date Sun, 28 Dec 2025 20:34:22 -0800
parents 70ca1d99f3fd
children 8ceb5d3c6bdd
line wrap: on
line source

const SCREEN_WIDTH = 600;
const SCREEN_HEIGHT = 600;
const PIXEL_SIZE = 10;
const FRAME = 60

game.width = SCREEN_WIDTH;
game.height = SCREEN_HEIGHT;

const ctx = game.getContext("2d");

function drawBackground() {
  ctx.fillStyle = "black";
  ctx.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}

function drawPixel({x, y}) {
  ctx.fillStyle = "blue";
  ctx.fillRect(x * SCREEN_WIDTH, y * SCREEN_HEIGHT, PIXEL_SIZE, PIXEL_SIZE);
}

function normazlie({x, y}) {
  return {
    x: ((x + 1) / 2),
    y: (1 - ((y + 1) / 2)),
  }
}

function threeDtotwoD({x, y, z}) {
  return {
    x: x/z,
    y: y/z
  }
}

function drawLine({x, y}, {x2, y2}) {
  console.log("Hello", x,y, x2,y2);
  ctx.beginPath();
  ctx.moveTo(x * SCREEN_WIDTH, y * SCREEN_HEIGHT);
  ctx.lineTo(x2 * SCREEN_WIDTH, y2* SCREEN_HEIGHT);
  ctx.lineWidth = 3;
  ctx.strokeStyle = "red";
  ctx.stroke();
}

const test = 0;
const points = [
  {x: -0.25,  y:  0.25,  z: 0.5 + test},
  {x: -0.25,  y: -0.25,  z: 0.5 + test},
  {x:  0.25,  y: -0.25,  z: 0.5 + test},
  {x:  0.25,  y:  0.25,  z: 0.5 + test},

  {x: -0.25,  y:  0.25,  z:  -0.5 + test},
  {x: -0.25,  y: -0.25,  z:  -0.5 + test},
  {x:  0.25,  y: -0.25,  z:  -0.5 + test},
  {x:  0.25,  y:  0.25,  z:  -0.5 + test},
]
const vortexs = [
  [0, 1, 2, 3],
  [4, 5, 6, 7],
  [0, 4],
  [1, 5],
  [2, 6],
  [3, 7],
]

function rotate_xz({x,y,z}, angle) {
  return {
    x: x * Math.cos(angle) - z*Math.sin(angle),
    y: y,
    z: x * Math.sin(angle) + z*Math.cos(angle),
  }
}

function move_z(point, dz) {
  return {...point, z: point.z + dz}
}

let dz = 0;
let dt = 1/FRAME;
let angle = 0;

function drawAnimation() {
  drawBackground();
  dz += 1 * dt;
  // angle += 2*Math.PI*dt;
  angle = 0;
  for (var vortex of vortexs)
  {
    for (let i = 0; i < vortex.length; i++)
    {
      const newPoint = normazlie(
          threeDtotwoD(
            move_z(rotate_xz(points[vortex[(i+1)%vortex.length]], angle), dz)
          )
        );

      drawLine(
        normazlie(
          threeDtotwoD(
            move_z(rotate_xz(points[vortex[i]], angle), dz)
          )
        ),
        {x2: newPoint.x, y2: newPoint.y}
      );
    }
  }
  setTimeout(() => drawAnimation(), 1000/60)
}

drawAnimation()