refactor: distribute lab-init.js into 34 engine files
lab-init.js: 4098 -> 543 lines (infrastructure + THEORY only) Each sim's _open*() + UI helpers moved to its engine file: graph.js, projectile.js, collision.js, magnetic.js, triangle.js, geometry.js, trigcircle.js, gas.js (molphys), coulomb.js, circuit.js, reactions.js (chemistry), newton.js (dynamics), chemsandbox.js, celldivision.js, photosynthesis.js, angrybirds.js, quadratic.js, normaldist.js, graphtransform.js, pendulum.js, equilibrium.js, thinlens.js, mirror.js, isoprocess.js, titration.js, refraction.js, probability.js, bohratom.js, electrolysis.js, waves.js, crystal.js, orbitals.js, stereo.js, hydrostatics.js All 34 engine files syntax-checked OK.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict';
|
||||
/* ══════════════════════════════════════════════════════════════
|
||||
PendulumSim — simple pendulum simulation
|
||||
θ'' = -(g/L)sin(θ) − γ·θ'
|
||||
@@ -402,3 +402,51 @@ class PendulumSim {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ─── lab UI init ─────────────────────────────────── */
|
||||
var pendSim = null;
|
||||
|
||||
function _openPendulum() {
|
||||
document.getElementById('sim-topbar-title').textContent = 'Маятник';
|
||||
_simShow('sim-pendulum');
|
||||
_registerSimState('pendulum', () => pendSim?.getParams(), st => pendSim?.setParams(st));
|
||||
if (_embedMode) _startStateEmit('pendulum');
|
||||
requestAnimationFrame(() => requestAnimationFrame(() => {
|
||||
if (!pendSim) {
|
||||
pendSim = new PendulumSim(document.getElementById('pendulum-canvas'));
|
||||
pendSim.onUpdate = _pendUpdateUI;
|
||||
}
|
||||
pendSim.fit();
|
||||
pendSim.play();
|
||||
}));
|
||||
}
|
||||
|
||||
function pendParam(name, val) {
|
||||
const v = parseFloat(val);
|
||||
const ids = { theta: 'pend-theta-val', L: 'pend-L-val', g: 'pend-g-val', damping: 'pend-damp-val' };
|
||||
const el = document.getElementById(ids[name]);
|
||||
if (el) el.textContent = v % 1 === 0 ? v : v.toFixed(name === 'g' ? 2 : 1);
|
||||
if (pendSim) pendSim.setParams({ [name]: v });
|
||||
}
|
||||
|
||||
function pendPreset(theta, L, g, damp) {
|
||||
document.getElementById('sl-pend-theta').value = theta; document.getElementById('pend-theta-val').textContent = theta;
|
||||
document.getElementById('sl-pend-L').value = L; document.getElementById('pend-L-val').textContent = L;
|
||||
document.getElementById('sl-pend-g').value = g; document.getElementById('pend-g-val').textContent = g;
|
||||
document.getElementById('sl-pend-damp').value = damp; document.getElementById('pend-damp-val').textContent = damp;
|
||||
if (pendSim) {
|
||||
pendSim.setParams({ theta, L, g, damping: damp });
|
||||
pendSim.play();
|
||||
}
|
||||
}
|
||||
|
||||
function _pendUpdateUI(info) {
|
||||
const v = (id, val) => { const el = document.getElementById(id); if (el) el.textContent = val; };
|
||||
v('pendbar-v1', info.angle);
|
||||
v('pendbar-v2', info.omega);
|
||||
v('pendbar-v3', info.period);
|
||||
v('pendbar-v4', info.energy);
|
||||
}
|
||||
|
||||
/* ── equilibrium ── */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user