Skip to content

Instantly share code, notes, and snippets.

@connorshea
Created December 25, 2018 07:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save connorshea/823aec0c03e38a18e9aae47f8706c229 to your computer and use it in GitHub Desktop.
Save connorshea/823aec0c03e38a18e9aae47f8706c229 to your computer and use it in GitHub Desktop.
Based on http://prgreen.github.io/blog/2013/09/30/the-bouncing-dvd-logo-explained/, a simple HTML page that renders a simulation of the DVD screensaver.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>DVD Screensaver</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
height: 100vh;
width: 100vw;
background-color: black;
padding: 10px;
}
canvas#c {
border: solid 1px white;
margin: auto;
display: block;
}
#text-box,
#counter {
color: white;
margin: auto;
display: block;
width: 600px;
padding: 10px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
</style>
<canvas id="c"></canvas>
<div id="text-box"></div>
<div id="counter"></div>
<script type="text/javascript">
let x = 0;
let y = 0;
let vx = 1;
let vy = 1;
let w = 90;
let h = 60;
let W = 600;
let H = 450;
let text = "N/A";
let count = 0;
function gcd(a, b) {
let temp;
if (a < 0) {
a = -a;
}
if (b < 0) {
b = -b;
}
if (b > a) {
temp = a;
a = b;
b = temp;
}
while (true) {
a %= b;
if (a == 0) {
return b;
}
b %= a;
if (b == 0) {
return a;
}
}
return b;
}
function lcm(a, b) {
return Math.abs(a * b) / gcd(a, b);
}
let W0 = W - w;
let H0 = H - h;
console.log("W0 " + W0);
console.log("H0 " + H0);
console.log("gcd " + gcd(W0, H0));
console.log("lcm w h " + lcm(W0, H0));
if (Math.abs(x - y) % gcd(W0, H0) == 0) {
// corners will be reached
if ((Math.abs(x - y) / gcd(W0, H0)) % 2 == 0) {
console.log((lcm(W0, H0) / H0) % 2 == 0 ? "T" : "B");
console.log((lcm(W0, H0) / W0) % 2 == 0 ? "L" : "R");
console.log("T");
console.log("L");
} else {
console.log((lcm(W0, H0) / H0) % 2 != 0 ? "T" : "B");
console.log((lcm(W0, H0) / W0) % 2 != 0 ? "L" : "R");
console.log("B");
console.log("R");
}
} else {
console.log("No corner!");
}
function animate() {
window.requestAnimationFrame(animate);
// Change if you want it to go faster
let speed = 3;
for (let i = 0; i < speed; i++) {
x += vx;
y += vy;
if (x + w == W) {
vx = -vx;
}
if (y + h == H) {
vy = -vy;
}
if (x == 0) {
vx = -vx;
}
if (y == 0) {
vy = -vy;
}
}
draw();
}
function draw() {
let canvas = document.getElementById("c");
let context = canvas.getContext("2d");
context.clearRect(0, 0, W, H);
context.fillStyle = "#000000";
context.fillRect(0, 0, W, H);
context.fillStyle = "#000000";
context.fillRect(x, y, w, h);
let img = new Image(w, h);
img.src = "data:image/png;base64,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";
context.drawImage(img, x, y, w, h);
// test whether we are in a corner
if (x == 0 && y == 0) {
count += 1;
text = "TOP LEFT";
} else if (x == 0 && y + h == H) {
count += 1;
text = "BOTTOM LEFT";
} else if (x + w == W && y == 0) {
count += 1;
text = "TOP RIGHT";
} else if (x + w == W && y + h == H) {
count += 1;
text = "BOTTOM RIGHT";
}
}
let ctx = document.getElementById("c").getContext("2d");
ctx.canvas.width = W;
ctx.canvas.height = H;
ctx.font = "20px Monaco";
let textBox = document.getElementById("text-box");
let counter = document.getElementById("counter");
console.log(text);
textBox.innerHTML = `Last hit: ${text}`;
counter.innerHTML = `Count: ${count}`;
window.setInterval(function(){
console.log(text);
textBox.innerHTML = `Last hit: ${text}`;
counter.innerHTML = `Count: ${count}`;
}, 3000);
animate();
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment