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';
|
||||
/* ══════════════════════════════════════════════════════════════
|
||||
IsoprocessSim — PV-diagram for 4 ideal-gas isoprocesses
|
||||
n = 1, R = 0.0821 L·atm/mol·K; energies in Joules
|
||||
@@ -462,3 +462,74 @@ class IsoprocessSim {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ─── lab UI init ─────────────────────────────────── */
|
||||
var isoSim = null;
|
||||
|
||||
function _openIsoprocess() {
|
||||
document.getElementById('sim-topbar-title').textContent = 'Изопроцессы';
|
||||
_simShow('sim-isoprocess');
|
||||
_registerSimState('isoprocess', () => isoSim?.getParams(),
|
||||
st => { if (isoSim) { isoSim.setParams(st); if (st.process) isoSim.setProcess(st.process); } });
|
||||
if (_embedMode) _startStateEmit('isoprocess');
|
||||
requestAnimationFrame(() => requestAnimationFrame(() => {
|
||||
if (!isoSim) {
|
||||
isoSim = new IsoprocessSim(document.getElementById('isoprocess-canvas'));
|
||||
isoSim.onUpdate = _isoUpdateUI;
|
||||
isoSim.setGamma(1.667);
|
||||
}
|
||||
isoSim.fit();
|
||||
isoSim.draw();
|
||||
isoSim._emit();
|
||||
}));
|
||||
}
|
||||
|
||||
function isoProc(proc, el) {
|
||||
document.querySelectorAll('.iso-proc-btn').forEach(b => b.classList.remove('active'));
|
||||
if (el) el.classList.add('active');
|
||||
if (isoSim) isoSim.setProcess(proc);
|
||||
}
|
||||
|
||||
function isoGamma(g, el) {
|
||||
document.querySelectorAll('.iso-gamma-btn').forEach(b => b.classList.remove('active'));
|
||||
if (el) el.classList.add('active');
|
||||
if (isoSim) isoSim.setGamma(g);
|
||||
}
|
||||
|
||||
function isoParam(name, val) {
|
||||
const v = parseFloat(val);
|
||||
if (name === 'P1') { document.getElementById('iso-p1-val').textContent = v.toFixed(1); if (isoSim) isoSim.setParams({ P1: v }); }
|
||||
if (name === 'V1') { document.getElementById('iso-v1-val').textContent = v; if (isoSim) isoSim.setParams({ V1: v }); }
|
||||
}
|
||||
|
||||
function isoRatio(val) { if (isoSim) isoSim.setRatio(parseFloat(val)); }
|
||||
|
||||
function isoPreset(name) {
|
||||
const P = {
|
||||
iso_expand: { proc:'isothermal', P1:4, V1:8, ratio:0.75, gamma:1.4 },
|
||||
iso_comp: { proc:'isothermal', P1:1.5, V1:20, ratio:0.25, gamma:1.4 },
|
||||
heat_iso: { proc:'isochoric', P1:2, V1:10, ratio:0.72, gamma:1.667 },
|
||||
adiab_exp: { proc:'adiabatic', P1:5, V1:6, ratio:0.7, gamma:1.667 },
|
||||
};
|
||||
const p = P[name]; if (!p) return;
|
||||
document.querySelectorAll('.iso-proc-btn').forEach(b => b.classList.remove('active'));
|
||||
const pb = document.getElementById(`iproc-${p.proc}`); if (pb) pb.classList.add('active');
|
||||
document.querySelectorAll('.iso-gamma-btn').forEach(b => b.classList.remove('active'));
|
||||
const gb = document.getElementById(p.gamma === 1.4 ? 'igamma-14' : 'igamma-167'); if (gb) gb.classList.add('active');
|
||||
document.getElementById('sl-iso-p1').value = p.P1; document.getElementById('iso-p1-val').textContent = p.P1.toFixed(1);
|
||||
document.getElementById('sl-iso-v1').value = p.V1; document.getElementById('iso-v1-val').textContent = p.V1;
|
||||
document.getElementById('sl-iso-ratio').value = p.ratio;
|
||||
if (isoSim) { isoSim.setGamma(p.gamma); isoSim.setProcess(p.proc); isoSim.setParams({ P1: p.P1, V1: p.V1 }); isoSim.setRatio(p.ratio); }
|
||||
}
|
||||
|
||||
function _isoUpdateUI(info) {
|
||||
const v = (id, val) => { const el = document.getElementById(id); if (el) el.textContent = val; };
|
||||
v('isobar-t1', info.T1);
|
||||
v('isobar-t2', info.T2);
|
||||
v('isobar-w', info.W);
|
||||
v('isobar-q', info.Q);
|
||||
v('isobar-du', info.dU);
|
||||
}
|
||||
|
||||
/* ── titration ── */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user