diff --git a/frontend/js/phys-fx.js b/frontend/js/phys-fx.js
index 43953d0..4bd9793 100644
--- a/frontend/js/phys-fx.js
+++ b/frontend/js/phys-fx.js
@@ -595,4 +595,241 @@ class LongitudinalWave {
}
P.LongitudinalWave = LongitudinalWave;
+/* ============================================================ */
+/* LCcircuit — колебательный контур */
+/* q(t) = Q0 cos(ωt), i(t) = -Q0 ω sin(ωt), ω = 1/√(LC) */
+/* ============================================================ */
+
+class LCcircuit {
+ constructor(container, opts){
+ opts = opts || {};
+ this.el = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.W = opts.width || 480;
+ this.H = opts.height || 280;
+ this.L = opts.L !== undefined ? opts.L : 0.01; /* Гн */
+ this.C = opts.C !== undefined ? opts.C : 1e-6; /* Ф */
+ this.Q0 = opts.Q0 !== undefined ? opts.Q0 : 1.0; /* нормированный заряд */
+ this.color = opts.color || '#7c3aed';
+ this.paused = false;
+ this.t = 0;
+ util.subscribe(this);
+ util.observe(this);
+ this.render();
+ }
+ setL(L){ this.L = Math.max(1e-4, L); }
+ setC(C){ this.C = Math.max(1e-9, C); }
+ period(){ return 2 * Math.PI * Math.sqrt(this.L * this.C); }
+ freq(){ return 1 / this.period(); }
+ update(dt){ this.t += dt; }
+ render(){
+ if (!this.el) return;
+ const W = this.W, H = this.H;
+ const T = this.period();
+ const omega = 2 * Math.PI / T;
+ const phase = omega * this.t;
+ const q = this.Q0 * Math.cos(phase);
+ const i = -this.Q0 * omega * Math.sin(phase);
+ /* Геометрия: C слева вверху, L справа вверху, соединены проводами */
+ const cx = W / 2, cy = H / 2 - 20;
+ const cap = {x: cx - 100, y: cy};
+ const ind = {x: cx + 100, y: cy};
+ /* Energies (для подсветки): W_C ~ q², W_L ~ i² */
+ const WC = q * q;
+ const WL = (i / omega) * (i / omega); /* в норм. единицах */
+ const total = WC + WL;
+ const cOpacity = 0.3 + 0.7 * WC / total;
+ const lOpacity = 0.3 + 0.7 * WL / total;
+ let svg = util.svgFrame(W, H, {bg:'#f8fafc'});
+ /* Провода */
+ const wireY1 = cy - 50, wireY2 = cy + 50;
+ svg += ' ';
+ svg += ' ';
+ /* Конденсатор: две параллельные пластины */
+ const plateW = 36;
+ svg += '';
+ svg += ' ';
+ svg += ' ';
+ svg += ' ';
+ /* Заряды на пластинах */
+ const sign = q > 0 ? 1 : -1;
+ const topCh = sign > 0 ? '+' : '−';
+ const botCh = sign > 0 ? '−' : '+';
+ const qAbsNorm = Math.abs(q) / this.Q0;
+ svg += '' + topCh + ' ';
+ svg += '' + botCh + ' ';
+ svg += 'C ';
+ /* Индуктор: петли */
+ const coils = 4, coilR = 8, coilW = 64;
+ let coilPath = 'M ' + (ind.x - coilW/2) + ' ' + ind.y;
+ for (let k = 0; k < coils; k++){
+ const x0 = ind.x - coilW/2 + (coilW / coils) * k;
+ coilPath += ' a ' + coilR + ' ' + coilR + ' 0 0 1 ' + (coilW / coils) + ' 0';
+ }
+ svg += ' ';
+ svg += 'L ';
+ /* Стрелка тока */
+ const iDir = i > 0 ? 1 : -1;
+ const iAbs = Math.abs(i) / (this.Q0 * omega);
+ if (iAbs > 0.05){
+ const aY = wireY1 - 14;
+ const aX1 = cx - 30 * iDir;
+ const aX2 = cx + 30 * iDir;
+ svg += ' ';
+ svg += ' ';
+ svg += 'i ';
+ }
+ /* Энергетические столбцы */
+ const eY = H - 36, eH = 24;
+ svg += ' ';
+ svg += ' ';
+ svg += 'W_C ';
+ svg += ' ';
+ svg += ' ';
+ svg += 'W_L ';
+ /* Подпись периода */
+ const Tdisp = T < 1e-3 ? (T * 1e6).toFixed(1) + ' мкс' : (T * 1e3).toFixed(2) + ' мс';
+ svg += 'T = 2π√(LC) = ' + Tdisp + ' ';
+ svg += '';
+ this.el.innerHTML = svg;
+ }
+}
+P.LCcircuit = LCcircuit;
+
+/* ============================================================ */
+/* ACgen — генератор переменного тока (вращающаяся рамка в B) */
+/* ============================================================ */
+
+class ACgen {
+ constructor(container, opts){
+ opts = opts || {};
+ this.el = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.W = opts.width || 540;
+ this.H = opts.height || 240;
+ this.omega = opts.omega !== undefined ? opts.omega : 2 * Math.PI; /* рад/с */
+ this.U0 = opts.U0 !== undefined ? opts.U0 : 1.0;
+ this.color = opts.color || '#7c3aed';
+ this.tWindow = opts.tWindow || 4;
+ this.paused = false;
+ this.t = 0;
+ this.history = [];
+ util.subscribe(this);
+ util.observe(this);
+ this.render();
+ }
+ setOmega(w){ this.omega = w; this.history = []; }
+ update(dt){
+ this.t += dt;
+ this.history.push([this.t, this.U0 * Math.sin(this.omega * this.t)]);
+ while (this.history.length && this.history[0][0] < this.t - this.tWindow) this.history.shift();
+ }
+ render(){
+ if (!this.el) return;
+ const W = this.W, H = this.H;
+ /* Левая часть: рамка в магнитном поле; правая: график U(t) */
+ const leftW = 200;
+ const rightLeft = leftW + 10;
+ let svg = util.svgFrame(W, H, {bg:'#f8fafc'});
+ /* Магнитное поле (стрелки B) */
+ svg += '';
+ for (let i = 0; i < 5; i++){
+ const x = 20 + i * 40;
+ svg += ' ';
+ }
+ svg += ' ';
+ svg += ' ';
+ svg += 'B ';
+ /* Вращающаяся рамка: эллипс, отображающий проекцию прямоугольника */
+ const fx = 110, fy = H / 2;
+ const phi = this.omega * this.t;
+ const rx = 40 * Math.abs(Math.cos(phi));
+ const ry = 30;
+ svg += ' ';
+ /* Ось вращения */
+ svg += ' ';
+ /* Контакт скользящих колец (схема) */
+ svg += ' ';
+ svg += ' ';
+ /* График U(t) — справа */
+ const gPad = 26;
+ const tMin = Math.max(0, this.t - this.tWindow);
+ const ax = util.axes(W - rightLeft, H, gPad, this.tWindow, [-this.U0 * 1.2, this.U0 * 1.2]);
+ svg += '' + ax.svg + ' ';
+ if (this.history.length > 1){
+ const pts = this.history.map(([t, y]) => (rightLeft + ax.left + (t - tMin) * (ax.right - ax.left) / this.tWindow).toFixed(1) + ',' + ax.toY(y).toFixed(1));
+ svg += ' ';
+ }
+ /* Подпись */
+ svg += 'U(t) = U₀ sin(ωt) ';
+ svg += '';
+ this.el.innerHTML = svg;
+ }
+}
+P.ACgen = ACgen;
+
+/* ============================================================ */
+/* Transformer — схема трансформатора с расчётом */
+/* ============================================================ */
+
+class Transformer {
+ constructor(container, opts){
+ opts = opts || {};
+ this.el = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.W = opts.width || 520;
+ this.H = opts.height || 240;
+ this.N1 = opts.N1 || 200;
+ this.N2 = opts.N2 || 50;
+ this.U1 = opts.U1 || 220;
+ this.color = opts.color || '#7c3aed';
+ this.render();
+ }
+ setN1(n){ this.N1 = Math.max(1, n|0); this.render(); }
+ setN2(n){ this.N2 = Math.max(1, n|0); this.render(); }
+ setU1(u){ this.U1 = u; this.render(); }
+ update(){ /* статика */ }
+ render(){
+ if (!this.el) return;
+ const W = this.W, H = this.H;
+ const k = this.N1 / this.N2;
+ const U2 = this.U1 / k;
+ const cy = H / 2;
+ let svg = util.svgFrame(W, H, {bg:'#f8fafc'});
+ /* Сердечник трансформатора (прямоугольник с вырезом) */
+ const coreL = 110, coreR = W - 110;
+ svg += ' ';
+ svg += ' ';
+ /* Первичная обмотка слева */
+ const coil1X = coreL + 24;
+ for (let i = 0; i < 6; i++){
+ const y = cy - 50 + i * 16;
+ svg += ' ';
+ }
+ /* Вторичная обмотка справа */
+ const coil2X = coreR - 24;
+ /* Адаптируем число витков визуально (max 8 для удобства) */
+ const visTurns2 = Math.max(2, Math.min(10, Math.round(6 * this.N2 / this.N1)));
+ for (let i = 0; i < visTurns2; i++){
+ const y = cy - 50 + i * (100 / visTurns2);
+ svg += ' ';
+ }
+ /* Провода-выходы первичной */
+ svg += ' ';
+ svg += ' ';
+ /* Провода вторичной */
+ svg += ' ';
+ svg += ' ';
+ /* Подписи N1, N2, U1, U2 */
+ svg += 'N₁ = ' + this.N1 + ' ';
+ svg += 'N₂ = ' + this.N2 + ' ';
+ svg += 'N₂ = ' + this.N2 + ' ';
+ svg += 'U₁ = ' + this.U1.toFixed(0) + ' В ';
+ svg += 'U₂ = ' + U2.toFixed(1) + ' В ';
+ /* Подпись коэф. */
+ svg += 'k = N₁/N₂ = ' + k.toFixed(2) + ' ';
+ svg += '' + (k > 1 ? 'понижающий' : 'повышающий') + ' ';
+ svg += '';
+ this.el.innerHTML = svg;
+ }
+}
+P.Transformer = Transformer;
+
})();
diff --git a/frontend/textbooks/physics_11_ch2.html b/frontend/textbooks/physics_11_ch2.html
index 8f29a59..122472d 100644
--- a/frontend/textbooks/physics_11_ch2.html
+++ b/frontend/textbooks/physics_11_ch2.html
@@ -1,191 +1,914 @@
-
+
-
-Физика 11 · Глава 2 · Электромагнитные колебания и волны
-
+Физика 11 · Глава 2 · «Электромагнитные колебания и волны»
+
-
+
+
-
+
-
-
- К курсу физики 11
-
+
Физика 11 · Глава 2
+
Электромагнитные колебания и волны · колебательный контур, переменный ток, трансформатор, ЭМ волны, шкала ЭМ
-
-
Глава 2. Электромагнитные колебания и волны
-
Колебательный контур, формула Томсона, переменный ток, трансформатор, передача электроэнергии, ЭМ волны · §7–§13
+
-
+
+
+
+
+ Электромагнитные колебания и волны
+ Аналогия механических колебаний — электромагнитные. Колебательный контур, переменный ток, трансформаторы, передача электроэнергии и шкала ЭМ волн от радио до γ-излучения.
+
+
Начать § 7
+
+
Прогресс по главе
+
+
0%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
Глава 2
-
Электромагнитные колебания и волны
-
Колебательный контур, формула Томсона, переменный ток, трансформатор, передача электроэнергии, ЭМ волны. Глава содержит 7 параграфов и финальный этап с боссами.
-
-
-
-
- § 7
-
-
Колебательный контур. Свободные ЭМ колебания. Формула Томсона
-
$T = 2\pi\sqrt{LC}$
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 8
-
-
Вынужденные ЭМ колебания. Переменный ток
-
$i = I_0\sin(\omega t)$, $I = I_0/\sqrt{2}$
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 9
-
-
Преобразование переменного тока. Трансформатор
-
$k = N_1/N_2 = U_1/U_2$
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 10
-
-
Производство, передача и потребление электроэнергии
-
ГЭС, ТЭС, АЭС; потери $P = I^2 R$
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 11
-
-
Экологические проблемы производства и передачи электроэнергии
-
ВЭС, СЭС, гео- и приливные
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 12
-
-
ЭМ волны. Шкала ЭМ волн
-
$c = 3 \cdot 10^8$ м/с
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
- § 13
-
-
Действие ЭМ излучения на живые организмы
-
Ионизирующее vs неионизирующее
-
-
- Будет добавлено в волне W3-W4
-
-
-
-
-
-
- Глава в разработке. Полная реализация — в следующих волнах. Базовая библиотека phys-fx.js уже доступна.
-
-
+
-
+
+
+
+