diff --git a/frontend/js/phys-fx.js b/frontend/js/phys-fx.js
index e11e36b..f2d6779 100644
--- a/frontend/js/phys-fx.js
+++ b/frontend/js/phys-fx.js
@@ -1732,4 +1732,187 @@ class LengthContraction {
}
P.LengthContraction = LengthContraction;
+/* ============================================================ */
+/* PhotoeffectLab — катод, свет, цепь, амперметр */
+/* ============================================================ */
+
+class PhotoeffectLab {
+ constructor(container, opts){
+ opts = opts || {};
+ this.el = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.W = opts.width || 580;
+ this.H = opts.height || 280;
+ this.nu = opts.nu !== undefined ? opts.nu : 8e14; /* Гц */
+ this.nu0 = opts.nu0 !== undefined ? opts.nu0 : 5.5e14; /* красная граница */
+ this.U = opts.U !== undefined ? opts.U : 0; /* В, тормозящее < 0 */
+ this.phase = 0;
+ this.paused = false;
+ util.subscribe(this);
+ util.observe(this);
+ this._render();
+ }
+ setNu(v){ this.nu = v; }
+ setNu0(v){ this.nu0 = v; }
+ setU(v){ this.U = v; }
+ /* Кинетическая энергия фотоэлектронов: hν - A (А = hν₀) */
+ ekMax(){
+ const h = 6.63e-34;
+ return Math.max(0, h * (this.nu - this.nu0));
+ }
+ /* Электроны летят, если их Eк больше тормозящего eU */
+ flying(){
+ const e = 1.6e-19;
+ return this.nu > this.nu0 && this.ekMax() > e * Math.max(0, -this.U);
+ }
+ update(dt){ this.phase += dt * 4; }
+ render(){
+ if (!this.el) return;
+ const W = this.W, H = this.H;
+ let svg = util.svgFrame(W, H, {bg:'#fef3c7'});
+ /* Лампа-источник */
+ const lx = 50, ly = 60;
+ svg += ' ';
+ svg += 'hν ';
+ /* Луч света — цвет зависит от ν: 4e14 (красн) до 1e15 (фиолет) */
+ const nuRel = Math.max(0, Math.min(1, (this.nu - 4e14) / 6e14));
+ const lightColor = `rgb(${Math.round(255*(1-nuRel))},${Math.round(80+120*(1-Math.abs(nuRel-0.5)*2))},${Math.round(255*nuRel)})`;
+ for (let i = 0; i < 6; i++){
+ const yo = (this.phase * 30 + i * 22) % 120;
+ svg += ' ';
+ }
+ /* Катод */
+ const cx = 180, cyy = 140;
+ svg += ' ';
+ svg += 'катод (-) ';
+ /* Анод */
+ const ax = 380;
+ svg += ' ';
+ svg += 'анод (' + (this.U >= 0 ? '+' : '-') + ') ';
+ /* Стеклянный баллон */
+ svg += ' ';
+ /* Электроны летят */
+ if (this.flying()){
+ for (let i = 0; i < 5; i++){
+ const t = ((this.phase * 0.7) + i * 0.2) % 1;
+ const ex = cx + 14 + t * (ax - cx - 14);
+ const ey = cyy + Math.sin(t * 6 + i) * 8;
+ svg += ' ';
+ svg += 'e ';
+ }
+ }
+ /* Цепь — снизу */
+ svg += ' ';
+ svg += ' ';
+ svg += ' ';
+ /* Амперметр */
+ const amx = (cx + ax) / 2 + 7, amy = H - 30;
+ svg += ' ';
+ svg += 'A ';
+ /* Стрелка тока */
+ if (this.flying()){
+ svg += 'I > 0 ';
+ } else {
+ svg += 'I = 0 ';
+ }
+ /* Подписи */
+ const h = 6.63e-34, e_ch = 1.6e-19;
+ const Em = this.ekMax();
+ const Aevh = h * this.nu0 / e_ch;
+ svg += 'hν = A + Eк ';
+ svg += 'ν = ' + (this.nu / 1e14).toFixed(2) + '·10¹⁴ Гц ';
+ svg += 'ν₀ = ' + (this.nu0 / 1e14).toFixed(2) + '·10¹⁴ Гц ';
+ svg += 'A = ' + Aevh.toFixed(2) + ' эВ ';
+ svg += 'Eк,max = ' + (Em/e_ch).toFixed(2) + ' эВ ';
+ svg += 'U = ' + this.U.toFixed(2) + ' В ';
+ svg += '';
+ this.el.innerHTML = svg;
+ }
+ _render(){ this.render(); }
+}
+P.PhotoeffectLab = PhotoeffectLab;
+
+/* ============================================================ */
+/* PlanckLinear — график Eк,max от ν */
+/* ============================================================ */
+
+class PlanckLinear {
+ constructor(container, opts){
+ opts = opts || {};
+ this.el = (typeof container === 'string') ? document.querySelector(container) : container;
+ this.W = opts.width || 560;
+ this.H = opts.height || 280;
+ this.nu0 = opts.nu0 !== undefined ? opts.nu0 : 5e14;
+ this.nu = opts.nu !== undefined ? opts.nu : 8e14;
+ this.paused = true;
+ this.render();
+ }
+ setNu0(v){ this.nu0 = v; this.render(); }
+ setNu(v){ this.nu = v; this.render(); }
+ update(){}
+ render(){
+ if (!this.el) return;
+ const W = this.W, H = this.H;
+ const pad = 50;
+ const left = pad, right = W - pad - 80, top = 30, bot = H - 50;
+ const numax = 12e14;
+ const h = 6.63e-34, e_ch = 1.6e-19;
+ const eMaxEV = h * (numax - this.nu0) / e_ch;
+ let svg = util.svgFrame(W, H, {bg:'#fdf2f8'});
+ /* Сетка */
+ svg += '';
+ for (let i = 0; i <= 12; i++){
+ const x = left + i * (right - left) / 12;
+ svg += ' ';
+ }
+ for (let i = 0; i <= 6; i++){
+ const y = top + i * (bot - top) / 6;
+ svg += ' ';
+ }
+ svg += ' ';
+ /* Оси */
+ svg += ' ';
+ svg += ' ';
+ svg += 'ν (·10¹⁴ Гц) ';
+ svg += 'Eк,max (эВ) ';
+ /* Прямая Eк = h(ν - ν₀) */
+ const nu0x = left + (this.nu0 / numax) * (right - left);
+ let pts = '';
+ for (let i = 0; i <= 50; i++){
+ const v = this.nu0 + i * (numax - this.nu0) / 50;
+ const eV = h * (v - this.nu0) / e_ch;
+ const x = left + (v / numax) * (right - left);
+ const y = bot - (eV / Math.max(0.1, eMaxEV)) * (bot - top);
+ pts += x.toFixed(1) + ',' + y.toFixed(1) + ' ';
+ }
+ svg += ' ';
+ /* До ν₀ — горизонтальная линия Eк = 0 */
+ svg += ' ';
+ /* Отметка ν₀ */
+ svg += ' ';
+ svg += 'ν₀ ';
+ /* Текущая точка ν */
+ const cx2 = left + (this.nu / numax) * (right - left);
+ const eVcur = Math.max(0, h * (this.nu - this.nu0) / e_ch);
+ const cy2 = bot - (eVcur / Math.max(0.1, eMaxEV)) * (bot - top);
+ svg += ' ';
+ svg += ' ';
+ /* Метки на осях X */
+ for (let v = 0; v <= 12; v += 2){
+ const x = left + (v / 12) * (right - left);
+ svg += '' + v + ' ';
+ }
+ /* Подпись */
+ svg += 'Eк,max = h(ν − ν₀) — угловой коэф. = h ';
+ /* Панель */
+ const px = right + 12;
+ svg += 'ν = ' + (this.nu/1e14).toFixed(1) + '·10¹⁴ ';
+ svg += 'ν₀ = ' + (this.nu0/1e14).toFixed(1) + '·10¹⁴ ';
+ svg += 'Eк = ' + eVcur.toFixed(2) + ' эВ ';
+ svg += 'A = ' + (h * this.nu0 / e_ch).toFixed(2) + ' эВ ';
+ svg += '';
+ this.el.innerHTML = svg;
+ }
+}
+P.PlanckLinear = PlanckLinear;
+
})();
diff --git a/frontend/textbooks/physics_11_ch5.html b/frontend/textbooks/physics_11_ch5.html
index a1a1813..42625e6 100644
--- a/frontend/textbooks/physics_11_ch5.html
+++ b/frontend/textbooks/physics_11_ch5.html
@@ -1,143 +1,930 @@
-
+
-
-Физика 11 · Глава 5 · Фотоны. Действия света
-
+Физика 11 · Глава 5 · «Фотоны. Действия света»
+
-
+
+
-
+
-
-
- К курсу физики 11
-
+
Физика 11 · Глава 5
+
Фотоны. Действия света · фотоэффект, квантовая гипотеза Планка, корпускулярно-волновой дуализм
-
-
Глава 5. Фотоны. Действия света
-
Фотоэффект, квантовая гипотеза Планка, фотон, уравнение Эйнштейна, давление света, корпускулярно-волновой дуализм · §27–§29
+
-
+
+
-
-
Глава 5
-
Фотоны. Действия света
-
Фотоэффект, квантовая гипотеза Планка, фотон, уравнение Эйнштейна, давление света, корпускулярно-волновой дуализм. Глава содержит 3 параграфа и финальный этап с боссами.
-
-
-
-
-
- § 27
-
-
Фотоэффект. Эксперим. законы. Квантовая гипотеза Планка
-
$E = h\nu$, $h = 6{,}63 \cdot 10^{-34}$ Дж·с
-
-
- Будет добавлено в волне W9
+
+ Свет как поток фотонов
+ Начало квантовой физики. Гипотеза Планка, фотоэффект Эйнштейна, давление света Лебедева и удивительный дуализм волна-частица. 3 параграфа + финал.
+
+
Начать § 27
+
+
Прогресс по главе
+
+
0%
+
-
+
-
- § 28
-
-
Фотон. Уравнение Эйнштейна для фотоэффекта
-
$h\nu = A_{вых} + \frac{mv_{max}^2}{2}$
-
-
- Будет добавлено в волне W9
-
-
-
+
+
+
+
+
+
-
- § 29
-
-
Давление света. Корпускулярно-волновой дуализм
-
$p_{фот} = h\nu/c$. Опыт Лебедева
-
-
- Будет добавлено в волне W9
-
-
-
-
-
- Глава в разработке. Полная реализация — в следующих волнах. Базовая библиотека phys-fx.js уже доступна.
-
-
+
-
+
+
+
+