← back to Model Arena
data/artifacts/2ca024f41f3c/qwen25-7b.html
92 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Solar System Orrery</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #000;
font-family: Arial, sans-serif;
}
canvas {
border: 2px solid white;
box-shadow: 0 0 20px rgba(255, 255, 255, 0.5);
}
.controls {
margin-top: 1rem;
}
</style>
</head>
<body>
<canvas id="orrery"></canvas>
<div class="controls">
<input type="range" min="1" max="30" value="10" step="1" id="speedSlider" />
<button onclick="togglePause()">Pause</button>
</div>
<script>
const canvas = document.getElementById('orrery');
const ctx = canvas.getContext('2d');
const width = canvas.width = 600;
const height = canvas.height = 600;
const planets = [
{ name: 'Mercury', radius: 1.5, dist: 18, speed: 3.5 },
{ name: 'Venus', radius: 2.7, dist: 38, speed: 2.9 },
{ name: 'Earth', radius: 4, dist: 60, speed: 2.4 },
{ name: 'Mars', radius: 3.5, dist: 100, speed: 2.1 },
{ name: 'Jupiter', radius: 8, dist: 200, speed: 1.6 },
{ name: 'Saturn', radius: 6, dist: 400, speed: 1.3 },
{ name: 'Uranus', radius: 5, dist: 700, speed: 1.2 },
{ name: 'Neptune', radius: 4, dist: 1100, speed: 1 }
];
let paused = false;
let time = Date.now();
function drawPlanet(planet) {
const angle = (time + planet.dist * 1000) / 1000 / 60 / 3.142 * 2 * Math.PI;
ctx.beginPath();
ctx.arc(width / 2, height / 2, planet.dist + planet.radius, 0, 2 * Math.PI);
ctx.stroke();
ctx.fillStyle = 'white';
ctx.save();
ctx.translate(width / 2 + planet.dist * Math.cos(angle), height / 2 + planet.dist * Math.sin(angle));
ctx.rotate(angle);
ctx.arc(planet.radius, 0, planet.radius, 0, 2 * Math.PI);
ctx.fill();
ctx.restore();
ctx.fillStyle = 'white';
ctx.fillText(planet.name, width / 2 + planet.dist * Math.cos(angle) - 5, height / 2 + planet.dist * Math.sin(angle));
}
function drawOrbitalRing(planet) {
const angle = (time + planet.dist * 1000) / 1000 / 60 / 3.142 * 2 * Math.PI;
ctx.beginPath();
ctx.arc(width / 2, height / 2, planet.dist - planet.radius, 0, 2 * Math.PI);
ctx.stroke();
}
function draw() {
ctx.clearRect(0, 0, width, height);
planets.forEach(drawPlanet);
planets.forEach(drawOrbitalRing);
requestAnimationFrame(draw);
}
document.getElementById('speedSlider').oninput = (event) => {
const speedValue = event.target.value;
planets.forEach(p => p.speed = speedValue / 10 + 2.4);
};
function togglePause() {
paused = !paused;
}
draw();
</script>
</body>
</html>