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';
|
||||
/* ══════════════════════════════════════════════════════════════
|
||||
ThinLensSim — thin lens ray tracing simulation
|
||||
1/f = 1/d + 1/d' M = -d'/d
|
||||
@@ -444,3 +444,46 @@ class ThinLensSim {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ─── lab UI init ─────────────────────────────────── */
|
||||
function _openThinLens() {
|
||||
document.getElementById('sim-topbar-title').textContent = 'Тонкая линза';
|
||||
_simShow('sim-thinlens');
|
||||
_registerSimState('thinlens', () => lensSim?.getParams(), st => lensSim?.setParams(st));
|
||||
if (_embedMode) _startStateEmit('thinlens');
|
||||
requestAnimationFrame(() => requestAnimationFrame(() => {
|
||||
if (!lensSim) {
|
||||
lensSim = new ThinLensSim(document.getElementById('thinlens-canvas'));
|
||||
lensSim.onUpdate = _lensUpdateUI;
|
||||
}
|
||||
lensSim.fit();
|
||||
lensSim.draw();
|
||||
lensSim._emit();
|
||||
}));
|
||||
}
|
||||
|
||||
function lensParam(name, val) {
|
||||
const v = parseFloat(val);
|
||||
const ids = { f: 'lens-f-val', d: 'lens-d-val', h: 'lens-h-val' };
|
||||
const el = document.getElementById(ids[name]);
|
||||
if (el) el.textContent = v;
|
||||
if (lensSim) lensSim.setParams({ [name]: v });
|
||||
}
|
||||
|
||||
function lensPreset(f, d, h) {
|
||||
document.getElementById('sl-lens-f').value = f; document.getElementById('lens-f-val').textContent = f;
|
||||
document.getElementById('sl-lens-d').value = d; document.getElementById('lens-d-val').textContent = d;
|
||||
document.getElementById('sl-lens-h').value = h; document.getElementById('lens-h-val').textContent = h;
|
||||
if (lensSim) lensSim.setParams({ f, d, h });
|
||||
}
|
||||
|
||||
function _lensUpdateUI(info) {
|
||||
const v = (id, val) => { const el = document.getElementById(id); if (el) el.textContent = val; };
|
||||
v('lensbar-v1', info.f);
|
||||
v('lensbar-v2', info.dPrime === Infinity ? '∞' : info.dPrime);
|
||||
v('lensbar-v3', info.M === Infinity ? '∞' : info.M);
|
||||
v('lensbar-v4', info.imageType);
|
||||
}
|
||||
|
||||
/* ── mirrors ── */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user