fix(textbooks): Физика 9 — escape § в num + phys9_legacy.js + финалы 5 глав

Багфиксы:
- gen_phys9_ch.js: убран двойной escape \u00a7 → литерал §
  (раньше карточка показывала '\u00a7 1' вместо '§ 1')
- phys9_legacy.js (262 КБ): извлечён весь JS монолита для глобальных onclick-
  обработчиков (startAnim1, lab11add/all/reset, checkNum, togglePend36 и пр.).
  Setup-код в конце обёрнут в try/catch — он рассчитан на DOM монолита.
- migrate_phys9_ch4.js + migrate_phys9_content.js: подключают phys9_legacy.js
  во все 5 ch-файлов перед закрытием <head>.

Финалы глав (write_phys9_finals.js):
- ch1: 5 задач (кинематика — поезд, разгон, окружность, лодка/река)
- ch2: 5 задач (динамика — трение, Гук, свободное падение, перегрузка)
- ch3: 5 задач (статика — рычаг, Архимед, блок, КПД накл. плоск., льдина)
- ch4: 5 задач (импульс — неупр. удар, ЗСЭ, мощность крана, пуля, бросок)
- ch5: 5 контрольных по практикуму (среднее, ЛР2, ЛР4, ЛР6, ЛР10)

Все задачи с автопроверкой через checkNum() (теперь работает из legacy.js).
This commit is contained in:
Maxim Dolgolyov
2026-05-30 08:55:00 +03:00
parent 0c6618fb38
commit dcdcde5b4e
10 changed files with 6625 additions and 62 deletions
+78 -19
View File
@@ -15,6 +15,7 @@
<script src="/js/api.js" defer></script>
<script src="/js/xp.js" defer></script>
<script src="/js/phys.js" defer></script>
<script src="/js/phys9_legacy.js" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<style>
:root{
@@ -632,20 +633,20 @@ const TOTAL_PARAS = 15;
const _TB_SLUG = 'physics-9-ch1';
const PARAS = [
{ id:"p1", num:"\\u00a7 1", name:"Механическое движение", sub:"материальная точка" },
{ id:"p2", num:"\\u00a7 2", name:"Относительность движения. Система отсчёта", sub:"СО · относительность" },
{ id:"p3", num:"\\u00a7 3", name:"Скалярные и векторные величины. Действия над векторами", sub:"$\\\\vec a + \\\\vec b$" },
{ id:"p4", num:"\\u00a7 4", name:"Проекция вектора на ось", sub:"$a_x = a\\\\cos\\\\alpha$" },
{ id:"p5", num:"\\u00a7 5", name:"Путь и перемещение", sub:"$s$ vs $\\\\Delta\\\\vec r$" },
{ id:"p6", num:"\\u00a7 6", name:"Равномерное прямолинейное движение. Скорость", sub:"$\\\\Delta\\\\vec r = \\\\vec v t$" },
{ id:"p7", num:"\\u00a7 7", name:"Графическое представление равномерного движения", sub:"графики $v(t)$, $x(t)$" },
{ id:"p8", num:"\\u00a7 8", name:"Неравномерное движение. Средняя и мгновенная скорость", sub:"$\\\\langle v\\\\rangle = s/t$" },
{ id:"p9", num:"\\u00a7 9", name:"Сложение скоростей", sub:"$\\\\vec v_{1,3} = \\\\vec v_{1,2} + \\\\vec v_{2,3}$" },
{ id:"p10", num:"\\u00a7 10", name:"Ускорение", sub:"$\\\\vec a = \\\\Delta\\\\vec v/\\\\Delta t$" },
{ id:"p11", num:"\\u00a7 11", name:"Скорость при равноускоренном движении", sub:"$\\\\vec v = \\\\vec v_0 + \\\\vec a t$" },
{ id:"p12", num:"\\u00a7 12", name:"Перемещение, координата и путь при равноускоренном движении", sub:"$x = x_0 + v_0 t + at^2/2$" },
{ id:"p13", num:"\\u00a7 13", name:"Линейная и угловая скорости", sub:"$v = \\\\omega R$" },
{ id:"p14", num:"\\u00a7 14", name:"Ускорение точки при движении по окружности", sub:"$a_n = v^2/R$" },
{ id:"p1", num:"§ 1", name:"Механическое движение", sub:"материальная точка" },
{ id:"p2", num:"§ 2", name:"Относительность движения. Система отсчёта", sub:"СО · относительность" },
{ id:"p3", num:"§ 3", name:"Скалярные и векторные величины. Действия над векторами", sub:"$\\\\vec a + \\\\vec b$" },
{ id:"p4", num:"§ 4", name:"Проекция вектора на ось", sub:"$a_x = a\\\\cos\\\\alpha$" },
{ id:"p5", num:"§ 5", name:"Путь и перемещение", sub:"$s$ vs $\\\\Delta\\\\vec r$" },
{ id:"p6", num:"§ 6", name:"Равномерное прямолинейное движение. Скорость", sub:"$\\\\Delta\\\\vec r = \\\\vec v t$" },
{ id:"p7", num:"§ 7", name:"Графическое представление равномерного движения", sub:"графики $v(t)$, $x(t)$" },
{ id:"p8", num:"§ 8", name:"Неравномерное движение. Средняя и мгновенная скорость", sub:"$\\\\langle v\\\\rangle = s/t$" },
{ id:"p9", num:"§ 9", name:"Сложение скоростей", sub:"$\\\\vec v_{1,3} = \\\\vec v_{1,2} + \\\\vec v_{2,3}$" },
{ id:"p10", num:"§ 10", name:"Ускорение", sub:"$\\\\vec a = \\\\Delta\\\\vec v/\\\\Delta t$" },
{ id:"p11", num:"§ 11", name:"Скорость при равноускоренном движении", sub:"$\\\\vec v = \\\\vec v_0 + \\\\vec a t$" },
{ id:"p12", num:"§ 12", name:"Перемещение, координата и путь при равноускоренном движении", sub:"$x = x_0 + v_0 t + at^2/2$" },
{ id:"p13", num:"§ 13", name:"Линейная и угловая скорости", sub:"$v = \\\\omega R$" },
{ id:"p14", num:"§ 14", name:"Ускорение точки при движении по окружности", sub:"$a_n = v^2/R$" },
{ id:"final1", num:'\u2605', name:'Финал главы', sub:"Итоги · боссы главы 1", final:true }
];
PARAS.forEach(p => { STATE.progress[p.id] = 0; });
@@ -2027,11 +2028,69 @@ function build_final1(){
const box = document.getElementById('final1-body');
let html = '';
html += makeCard('theory', "Финал главы 1", "★", `
<p><b>Финал главы 1</b> — этот параграф в разработке (Phase 1+).</p>
<p>Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «физики 10» — векторные диаграммы, графики движения, ползунки и автопроверяемые тренажёры.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.92rem">
<b>Phase 0:</b> создан скелет. <b>Phase 5:</b> наполнение по учебнику «Физика 9» (Исаченкова, Сокольский, Захаревич, 2019).
</p>
<div class="formula-grid" style="margin-bottom:20px">
<div class="fcard highlight"><h3>Равномерное движение</h3>
<div class="main-f">$\\vec{v} = \\text{const}$</div>
<p>$\\Delta\\vec{r} = \\vec{v}\\,t$ · $x = x_0 + v_x t$ · $s = vt$</p>
</div>
<div class="fcard"><h3>Равноускоренное</h3>
<div class="main-f">$\\vec{v} = \\vec{v}_0 + \\vec{a}\\,t$</div>
<p>$\\Delta\\vec{r} = \\vec{v}_0 t + \\dfrac{\\vec{a} t^2}{2}$ · $v^2 - v_0^2 = 2a_x\\Delta x$</p>
</div>
<div class="fcard"><h3>По окружности</h3>
<div class="main-f">$a_n = \\dfrac{v^2}{R} = \\omega^2 R$</div>
<p>$\\omega = \\dfrac{2\\pi}{T} = 2\\pi\\nu$ · $v = \\omega R$</p>
</div>
</div>
<div class="section-title"><i class="fas fa-star"></i> Интегрированные задачи</div>
<div class="task-card">
<div class="task-num">Задача 1</div>
<div class="task-text">Автомобиль за $t_1 = 20$ с разгоняется до $v_1 = 20$ м/с, далее едет $t_2 = 60$ с с постоянной скоростью. Найдите средний модуль скорости за всё время движения. Начальная скорость $v_0 = 0$.</div>
<div class="task-hint">Сложите путь на каждом участке: $s_1 = v_1 t_1 / 2$, $s_2 = v_1 t_2$. Средняя $\\langle v\\rangle = (s_1 + s_2)/(t_1 + t_2)$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin1-q1" step="any"><span class="unit-lbl">м/с</span>
<button class="btn btn-pri" onclick="checkNum('fin1-q1', 17.5, 'м/с', 0.5)">Проверить</button></div>
<div class="feedback" id="fb-fin1-q1"></div>
</div>
<div class="task-card">
<div class="task-num">Задача 2</div>
<div class="task-text">Тело движется с ускорением $a = 2$ м/с². Через $t = 5$ с его скорость стала $v = 14$ м/с. Найдите начальную скорость тела.</div>
<div class="task-hint">$v = v_0 + at$, откуда $v_0 = v - at$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin1-q2" step="any"><span class="unit-lbl">м/с</span>
<button class="btn btn-pri" onclick="checkNum('fin1-q2', 4, 'м/с', 0.1)">Проверить</button></div>
<div class="feedback" id="fb-fin1-q2"></div>
</div>
<div class="task-card">
<div class="task-num">Задача 3</div>
<div class="task-text">Шарик движется по окружности радиуса $R = 0{,}5$ м с периодом $T = 2{,}0$ с. Найдите модуль центростремительного ускорения.</div>
<div class="task-hint">$a_n = \\dfrac{4\\pi^2 R}{T^2}$. Подставьте $\\pi \\approx 3{,}14$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin1-q3" step="any"><span class="unit-lbl">м/с²</span>
<button class="btn btn-pri" onclick="checkNum('fin1-q3', 4.93, 'м/с²', 0.1)">Проверить</button></div>
<div class="feedback" id="fb-fin1-q3"></div>
</div>
<div class="task-card">
<div class="task-num">Задача 4</div>
<div class="task-text">Катер движется по реке со скоростью $v_к = 5$ м/с относительно воды. Скорость течения $v_р = 2$ м/с. Найдите модуль скорости катера относительно берега при движении против течения.</div>
<div class="task-hint">Против течения скорости вычитаются: $v = v_к - v_р$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin1-q4" step="any"><span class="unit-lbl">м/с</span>
<button class="btn btn-pri" onclick="checkNum('fin1-q4', 3, 'м/с', 0.05)">Проверить</button></div>
<div class="feedback" id="fb-fin1-q4"></div>
</div>
<div class="task-card">
<div class="task-num">Задача 5 (повышенный уровень)</div>
<div class="task-text">Поезд проходит мимо пешехода за $t_1 = 8$ с, а мимо платформы длиной $L = 200$ м — за $t_2 = 18$ с. Найдите скорость поезда. Поезд движется равномерно.</div>
<div class="task-hint">За $t_1$ поезд проходит свою длину $\\ell$, за $t_2$$\\ell + L$. Имеем $\\ell = v t_1$ и $\\ell + L = v t_2$. Отсюда $v = L/(t_2 - t_1)$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin1-q5" step="any"><span class="unit-lbl">м/с</span>
<button class="btn btn-pri" onclick="checkNum('fin1-q5', 20, 'м/с', 0.1)">Проверить</button></div>
<div class="feedback" id="fb-fin1-q5"></div>
</div>
`);
html += secNav('p14', null);
html += readButton('final1');