sphere-electrons/index.html

131 lines
3.5 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Electrons on a sphere - atomic.garden</title>
<script src="lib/p5.js"></script>
<style>
:root {
--aside-width: 220px;
--aside-height: 270px;
}
.js {
display: none;
}
.noscript {
padding: 10px;
}
a {
color: cornflowerblue;
}
body {
padding: 0;
margin: 0;
background-color: #1b1b1b;
overflow: hidden;
display: grid;
grid-template-columns: var(--aside-width) auto;
color: white;
}
aside {
padding: 20px;
height: 100vh;
box-sizing: border-box;
overflow: scroll;
}
aside > container {
display: flex;
flex-wrap: wrap;
gap: 12px;
}
aside button, aside input[type="number"] {
font-size: 20px;
}
aside button {
min-width: 27px;
}
aside input[type="checkbox"] {
width: 28px;
height: 28px;
}
aside > container > div {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
@media screen and (orientation:portrait) {
body {
grid-template-columns: none;
grid-template-rows: auto var(--aside-height);
}
aside {
order: 1;
}
aside > container {
flex-direction: row;
}
}
</style>
</head>
<body>
<aside class="js">
<container>
<div>
<button onclick="toggle_physics()">Physics</button>
<input id="checkbox-physics" type="checkbox" disabled>
</div>
<form style="display:grid;grid-template-columns:1fr auto;gap:5px;">
<input id="input-charge" type="range" min="-1.5" max="1.5" step="0.25"
style="min-width:100px;max-width:128px;"
oninput="set_charge(-Math.pow(10, input_charge.valueAsNumber))">
<input type="reset" onclick="input_charge.oninput()">
</form>
<div>
<button onclick="toggle_skeleton()">Skeleton</button>
<input id="checkbox-skeleton" type="checkbox" disabled>
<div></div>
<button onclick="toggle_polytope()">Polytope</button>
<input id="checkbox-polytope" type="checkbox" disabled>
</div>
<div>
<button id="button-surface-none" onclick="set_surface(SURFACE_NONE)">Hide surface</button>
<button id="button-surface-circles" onclick="set_surface(SURFACE_CIRCLES)">Wireframe</button>
<button id="button-surface-earth" onclick="set_surface(SURFACE_EARTH)">Earth</button>
</div>
<div>
<button onclick="make_particles(0)">0</button>
<button onclick="make_particles(1)">1</button>
<button onclick="make_particles(2)">2</button>
<button onclick="make_particles(3)">3</button>
<button onclick="make_particles(4)">4</button>
<button onclick="make_particles(5)">5</button>
<button onclick="make_particles(6)">6</button>
<button onclick="make_particles(7)">7</button>
<button onclick="make_particles(8)">8</button>
<button onclick="make_particles(9)">9</button>
</div>
<div style="display:grid;grid-template-columns:1fr auto;width:100%;">
<input id="input-particles" type="number" min="0" max="360"
onkeypress="if (event.key === 'Enter') button_particles.click()">
<button id="button-particles" onclick="make_particles(min(360, max(0, input_particles.valueAsNumber)))">Create</button>
</div>
</container>
</aside>
<main>
</main>
<noscript class="noscript">
This page requires JavaScript.
<br>
Source code: <a href="https://git.atomic.garden/root/sphere-electrons">https://git.atomic.garden/root/sphere-electrons</a>
</noscript>
<script src="thomson-problem.js"></script>
<script src="sketch.js"></script>
<script>
document.querySelectorAll(".js").forEach(e => e.style = "display:initial");
const input_charge = document.getElementById("input-charge");
input_charge.oninput();
const button_particles = document.getElementById("button-particles");
</script>
</body>
</html>