← back to Model Arena
data/artifacts/2ca024f41f3c/hf-qwen-coder-32b.html
97 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; }
canvas { border: 1px solid #fff; }
#controls { position: absolute; top: 10px; left: 10px; color: white; font-family: Arial, sans-serif; }
input[type="range"] { width: 200px; margin-right: 10px; }
</style>
</head>
<body>
<div id="controls">
Speed: <input type="range" id="speedSlider" min="0.1" max="5" step="0.1" value="1">
<button id="pauseButton">Pause</button>
</div>
<canvas id="solarSystem"></canvas>
<script>
const canvas = document.getElementById('solarSystem');
const ctx = canvas.getContext('2d');
canvas.width = 800;
canvas.height = 600;
const planets = [
{ name: 'Mercury', distance: 100, radius: 3, color: '#B57EDC', speed: 4.79 },
{ name: 'Venus', distance: 140, radius: 5, color: '#FFA07A', speed: 3.5 },
{ name: 'Earth', distance: 180, radius: 6, color: '#00BFFF', speed: 2.98 },
{ name: 'Mars', distance: 220, radius: 4, color: '#FF7F50', speed: 2.41 },
{ name: 'Jupiter', distance: 300, radius: 12, color: '#DAA520', speed: 1.31 },
{ name: 'Saturn', distance: 380, radius: 10, color: '#FFD700', speed: 0.96 },
{ name: 'Uranus', distance: 450, radius: 8, color: '#4682B4', speed: 0.68 },
{ name: 'Neptune', distance: 530, radius: 7, color: '#1E90FF', speed: 0.54 }
];
let angle = 0;
let paused = false;
function drawOrbit(radius) {
ctx.beginPath();
ctx.arc(canvas.width / 2, canvas.height / 2, radius, 0, Math.PI * 2);
ctx.strokeStyle = '#888';
ctx.stroke();
}
function drawPlanets() {
planets.forEach(planet => {
const x = canvas.width / 2 + planet.distance * Math.cos(angle * (planet.speed / 1.5));
const y = canvas.height / 2 + planet.distance * Math.sin(angle * (planet.speed / 1.5));
ctx.beginPath();
ctx.arc(x, y, planet.radius, 0, Math.PI * 2);
ctx.fillStyle = planet.color;
ctx.fill();
if (isMouseOverPlanet(x, y, planet.radius)) {
ctx.font = '14px Arial';
ctx.fillStyle = '#fff';
ctx.fillText(planet.name, x + planet.radius + 5, y);
}
});
}
function isMouseOverPlanet(px, py, pr) {
return Math.sqrt((mouseX - px) ** 2 + (mouseY - py) ** 2) <= pr;
}
let mouseX = 0;
let mouseY = 0;
canvas.addEventListener('mousemove', e => {
const rect = canvas.getBoundingClientRect();
mouseX = e.clientX - rect.left;
mouseY = e.clientY - rect.top;
});
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
planets.forEach(p => drawOrbit(p.distance));
drawPlanets();
if (!paused) angle += parseFloat(document.getElementById('speedSlider').value) * 0.01;
requestAnimationFrame(animate);
}
document.getElementById('pauseButton').addEventListener('click', () => {
paused = !paused;
document.getElementById('pauseButton').textContent = paused ? 'Resume' : 'Pause';
});
animate();
</script>
</body>
</html>