Путь (b): надёжный полигон (есть) + аналитический след и вспом. точки.
- _traceLine(): след = π ∩ плоскость основания y=0 (проверено численно)
- _auxiliaryPoints(): продление сторон сечения до следа (dist=0 на следе)
- _hasBase()/_sameFace(): топология тел с основанием
- настоящий пошаговый _drawSection3PStep: 6 подписанных шагов, финал скрыт
до шага 5 (showFull); подписи в #sect3p-hint через _stepCaption
- scope: куб, параллелепипед, призма, пирамида, усеч. пирамида, тетраэдр
- bump stereo.js?v=9
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- openSim('stereo:<figure>') и /lab?stereofig=<figure> открывают нужное тело
(без изменения общего hash-роутера)
- клавиатура на canvas: стрелки=орбита, +/-=зум, R/Home=сброс
- aria-live на readout; bump stereo.js?v=8
- дробление файла на модули отложено по решению пользователя (в бэклоге)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- live-readout overlay: тип сечения, площадь, периметр, последнее измерение
(через info().readout; _notify добавлен в section/measure-пути)
- _raycastFace(): в режиме точек клик по грани ставит точку на поверхности
- подписи вершин сечения буквами K,L,M… (наклонное/произвольное/3-точки, ≤12 вершин)
- bump stereo.js?v=6
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Глава 3 «Движение и силы» закрыта целиком. Файл вырос с 1082 до 2124 строк
(+1042). Экспортирует 15 функций: p14..p27 + final3.
§21 Сила:
- 3 карточки (что такое сила / стрелка-вектор / 4 силы из жизни)
- IV-1 СИМ: интерактивная стрелка силы с slider модуля и угла (0..360°)
- DnD 8→4 (Ft/Fупр/Fтр/N) / квиз 4 / тренажёр 4
§22 Сила тяжести:
- 3 карточки + IV-1 КАЛЬК: 4 кнопки планет (Земля/Луна/Марс/Юпитер) + slider m
→ Ft = mg с правильным g, выводом и подписью планеты
- DnD 6→3 (1Н/10Н/100Н) / квиз 4 / тренажёр 5
§23 Сила упругости:
- 3 карточки (когда возникает / Гук качественно / примеры)
- IV-1 СИМ: SVG-пружина с подвешенным грузом, slider Δl=0..20 см → растягивается,
стрелки Fупр↑ (зелёная) и Fт↓ (фиолетовая)
- DnD 6→2 (есть/нет деформации) / квиз 3 / тренажёр 4
§24 Вес тела:
- 3 карточки (P vs Ft / невесомость / взвешивание)
- IV-1 СИМ: 4 ситуации (покой / падение / ускорение вверх=перегрузка / вниз),
для каждой — стрелки Ft (фиолет, на тело) и P (индиго, на опору)
- DnD 6→3 (Ft/P/P=0) / квиз 4 / тренажёр 4
§25 Динамометр:
- 3 карточки + IV-1 СИМ: использует window.PHYS.dynamometer из phys.js,
slider F и Fmax → SVG с пружиной, шкалой, указателем; warning при превышении
- IV-2 КАЛЬК m = F/g с выбором планеты
- DnD 6→3 (школьный/мед./пром.) / тренажёр 4
§26 СЛОЖЕНИЕ СИЛ — ГЛАВНЫЙ ВИЗУАЛ ГЛАВЫ 3:
- 3 карточки (равнодействующая / сонапр/противопол / перетягивание каната)
- IV-1 «Конструктор сил на теле»: 4 slider'а Ft↓ + N↑ + Fтяги→ + Fтр←,
SVG-сцена с цветными стрелками от центра кубика и большой красной стрелкой R;
вердикт «уравновешены / ускоряется вправо/влево/падает/подпрыгнет/под углом»
- IV-2 КАЛЬК сложения 2 сил с переключателем сонапр./противопол.
- IV-3 DnD 6→3 (R вправо/влево/0) / тренажёр 5
§27 Сила трения:
- 3 карточки (откуда / виды / польза vs вред)
- IV-1 СИМ-симулятор: slider m, F, выбор μ из 4 поверхностей (лёд / сталь /
дерево / резина-асфальт). SVG с бруском, стрелками F→ и Fтр←, вердикт
«ЕДЕТ / ПОКОИТСЯ» по сравнению F с μN
- DnD 6→2 (полезно/мешает) / квиз 4 / тренажёр 5
ФИНАЛ ГЛАВЫ 3 (10 боссов + ачивка «Мастер движения» +50 XP):
1. v = s/t (20 м/с)
2. Средняя скорость с равным временем (7 м/с)
3. Плотность бруска → железо (7.8 г/см³)
4. Ft на Земле (39.2 Н)
5. Ft того же тела на Луне (6.4 Н)
6. Динамометр → масса (750 г)
7. R двух сил противоположных (12 Н)
8. R трёх сил на одной прямой (10 Н)
9. Сила трения скольжения (6 Н)
10. Магистр: брусок едет, Fтр_max < F, R = ? (2 Н)
Все интерактивы wireDnd/wireQuiz/слайдеры/SVG привязаны. Parse OK, smoke OK.
- _sliceCurvedByNormal(): аналитическое сечение шара (окружность) и
цилиндра/конуса/усеч.конуса (гладкая кривая через точное y(θ)); старый
сэмплинг оставлен fallback'ом для почти вертикальных плоскостей
- _edgePickNDC(): корректный пикинг ребра по всей длине (было — по середине)
- _makeTextSprite: DPR-aware, аспект по тексту, обводка, анизотропия
- тип сечения кривых = окружность/эллипс; вершинные маркеры cap ≤12 точек
- bump stereo.js?v=5
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- lab-init: _pauseAllSims() паузит активный rAF-сим при переключении (раньше стерео рендерило невидимый canvas вечно)
- stereo: render-on-demand через _invalidate()/_needsRender, loop засыпает и просыпается по взаимодействию
- pointer/touch-слушатели перенесены с window на canvas (pointer-capture), трекаются и снимаются в dispose()
- обработка webglcontextlost/restored + метод dispose()
- _clearGroup стал рекурсивным (устранена утечка вложенных групп), a11y-атрибуты на canvas
- bump stereo.js?v=3
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
WIDGETS (+390 строк, теперь 1139 строк, экспорт p1..p7 + final1):
§6 «Действия над физическими величинами»:
- 3 карточки (однородные величины / переводы скорости/плотности/мощности/энергии /
умножение единиц m·V → плотность)
- IV-1 СИМ: таблица типичных скоростей (улитка → звук в воздухе) в м/с и км/ч
- IV-2 КАЛЬК конвертер (главный визуал §6): 5 типов величин (скорость/плотность/
мощность/энергия/время), slider значения → перевод во все связанные единицы
- IV-3 DnD: 8 эквивалентных пар (1 мин=60 с, 1 кВт=1000 Вт, и т.д.)
- IV-4 ТРН: 5 задач (км/ч↔м/с, г/см³→кг/м³, ч+мин→с, сумма в разных приставках)
§7 «Цена деления. Погрешность»:
- 3 карточки (C = (X2-X1)/N / ΔX = C/2, запись X±ΔX / правила снятия отсчёта)
- IV-1 СИМ (главный визуал §7): виртуальная линейка SVG со сменой цены деления
(10/5/2/1 мм) и подвижной красной риской; авто-округление до ближайшего деления,
запись результата с погрешностью в KaTeX
- IV-2 КАЛЬК: 3 slider'а X1/X2/N → формула C и ΔX
- IV-3 DnD: 6 приборов (линейка/штангенциркуль/микрометр/термометры/секундомер)
→ 6 типичных цен деления
- IV-4 ТРН: 5 задач на цену деления и погрешность
ФИНАЛ ГЛАВЫ 1 (5 боссов + ачивка «Юный физик» +50 XP):
- Боссы (синтез §4-§7):
1. Площадь листа A4 в м² (перевод см→м + S=ab)
2. Плотность бруска с m=135 г и V=50 см³ (алюминий)
3. Скорость 90 км/ч в м/с
4. Цена деления (5 см = 50 делений → 1 мм)
5. Погрешность мензурки (C=2 мл → ΔV=1 мл) — Магистр-задача
- Прогресс-бар «Побеждено: N/5», localStorage-сохранение между сессиями,
+20 XP за каждого босса, ачивка +50 XP при 5/5 победах.
- Все боссы с подсказками (toggle), Enter-submit, валидация числа.
Все 4 IV в §6 и §7 wireDnd/wireQuiz/калькуляторы привязаны. parse-check, smoke-test (8 экспортов) пройдены.
WIDGETS (+347 строк к phys7_ch1_widgets.js, теперь 749 строк, экспорт p1..p5):
§3 «Методы исследования в физике»:
- 3 карточки (3 метода / отличия / опыт Галилея на Пизанской башне)
- IV-1 СИМ: timeline-список 5 исторических опытов (Архимед→Галилей→Торричелли→Паскаль→Ньютон) с раскрывающимися деталями
- IV-2 КВИЗ: 4 вопроса «опыт vs наблюдение vs гипотеза vs теория»
- IV-3 DnD: 8 ситуаций по 3 корзинам (наблюдение / эксперимент / гипотеза)
- IV-4 ТРН: 5 вопросов закрепления
§4 «Прямые и косвенные измерения» (S=ab, V=abc, rho=m/V):
- 3 карточки (типы измерений / основные формулы / объём картофеля по вытеснению)
- IV-1 СИМ: палитра 6 приборов (линейка/весы/термометр/секундомер/мензурка/динамометр) с единицами
- IV-2 КАЛЬК (главный визуал §4): 4 slider'а a, b, c (см) и m (г) →
пересчёт S, V, плотности с угадыванием вещества (дерево / алюминий / железо / свинец / золото)
- IV-3 DnD: 8 примеров измерений → прямое / косвенное
- IV-4 ТРН: 5 расчётных задач (площадь, объём кирпича, плотность, скорость, вытеснение)
§5 «Единицы измерения. СИ»:
- 3 карточки (зачем СИ / 7 основных единиц в таблице / приставки от нано до гига)
- IV-1 СИМ: 7 цветных карт основных единиц СИ
- IV-2 КАЛЬК конвертер: число × приставка (Г/М/к/—/с/м/мк/н) × единица (м/г/с/Вт/Гц/Н)
→ результат с автоформатированием (экспоненциальная запись для больших/малых)
- IV-3 DnD: 8 величин → 5 основных единиц СИ
- IV-4 ТРН: 5 задач на перевод (км→м, кг→г, ч→с, мс→с, см²→м²)
Pre-commit, parse-check, KaTeX-аудит (одиночные backslash =0), smoke-test (экспорт=5) пройдены.
Hub улучшения:
- .ch-card: подъём на hover (-6px scale 1.01) с тематической box-shadow
по цвету главы.
- .ch-cover::after: shimmer-overlay при наведении (diagonal sweep).
- .ch-cover-wm: micro-перемещение и scale на hover.
- .ch-action svg: стрелка едет вправо на hover.
- .po-xp: пульсирующая тень для overall progress XP-badge (3s loop).
Accessibility:
- aria-label на каждой ch-card с понятным названием темы.
- :focus-visible с 3px outline в brand-цвете для chapter cards.
- :focus-visible с белым outline для hdr-btn на градиенте.
- prefers-reduced-motion: блокирует все анимации.
Mobile responsiveness:
- @media ≤580px: уменьшение шрифта h1 1.4rem, ch-cover-wm 3.8rem.
Footer: '40 параграфов, 7 ЛР, 47 IV-6 интерактивов'.
F18. Магистр-симулятор сценария движения (final5 в ch5):
- Конструктор из 4 типов этапов:
- Равномерное (slider v)
- Равноускоренное (slider a)
- Свободное падение (a = -g)
- Стоп/покой
- Drag&drop карточек этапов с inline-input'ами:
- Δt длительность
- Параметр (v / a / —)
- Кнопка [×] удалить этап
- Шаблон «разгон + равном. + торможение»
- Реальная физика: Эйлер dt=0.05 с
- 3 синхронных графика: x(t), v(t), a(t)
- Автоматический масштаб по min/max
- Stats: число этапов, общая длительность, итог x и v
- Проверка согласованности скоростей между этапами (предупреждение
о «рывке» если v не сшивается)
- Сохранение/загрузка сценария в localStorage
(phys9_F18_scenario)
Подключение: ch5 + хук на final5.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Hero: spectrum-drift градиент (18s), солнце SVG-watermark
(rotate-анимация 40s), live-meter длины волны (400/470/550/600/700 нм
с цветами цикла).
9 section watermarks: лампа, тень, угол, зеркало, парабола,
рефракция, линза, призма, глаз.
9 IV-6 интерактивов:
§32 Источники — кнопки 'Точечный/Протяжённый' с динамической
тенью (точечный — чёткая, протяжённый — с полутенью).
§33 Тени — drag-источника по X, размер тени пересчитывается
проективно.
§34 Закон отражения — scrubber угла, лучи + нормаль.
§35 Плоское зеркало — drag-d объекта, мнимое изображение за
зеркалом на том же расстоянии (штриховая стрелка).
§36 Сферическое зеркало — drag-d, формула 1/v+1/d=1/F,
изображение с правильным знаком/размером.
§37 Преломление — scrubber угла, закон Снеллиуса (n₁=1, n₂=1.33).
§38 Линза — 3 главных луча от объекта, формула v=dF/(d-F),
изображение по принципу геометрической оптики.
§39 Дисперсия — призма с разложением белого света на 7 цветов
видимого спектра.
§40 Глаз — кнопки 'Норма/Близорукость/Дальнозоркость' с
fokus-точкой и корректирующей линзой (рассеив/собир).
F6. Симулятор скоростной дороги (§20 в ch2):
- 5 покрытий: сухой/мокрый асфальт, гравий, снег, лёд (μ=0.7..0.08)
- Slider скорости 20..180 км/ч
- Автомобиль едет по дороге, кнопка ТОРМОЗ → тормозит до 0
- Расчёт: s = v²/(2μg), t = v/(μg)
- На льду тормозной путь в ~8 раз длиннее асфальта
F13. Маятник Фуко (§36 в ch4):
- Маятник в виде розетки, плоскость вращается со скоростью
ω = sin(φ) · 2π / 24h
- Slider широты 0..90° (от экватора до полюса)
- На полюсе — 24ч полного оборота, на экваторе — никогда
- Slider «ускорение времени» × (100..20000) — чтобы увидеть розетку
- Места: экватор/Каир/Рим/Минск/Москва/Заполярье/полюс
F14. Резонанс пружинного маятника (§36 в ch4):
- Слева: пружина с грузом + внешняя гармоническая сила
- Slider'ы: m, k, ν_внешн, γ затухание
- Кнопка «Настроить на резонанс» (ν_внешн = ν_собств)
- Реальная физика затухания: m·x'' = -kx - γv + F0·cos(ωt)
- Справа: график x(t) за последние 20 с
- Классификация: вынужденные / близко к резонансу / РЕЗОНАНС!
Подключение:
- ch2: F6 на p20
- ch4: F13 + F14 оба на p36 (маятники)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
F9. Конструктор моста (§28 в ch3):
- Canvas 700×380: балка на 2 опорах
- Палитра грузов 50/100/200/500 кг (drag&drop) + тест 1000 кг
- Расчёт реакций опор через ΣF=0 + ΣM=0
- При перегрузке (>8000 Н) балка ломается визуально
F11. Бильярдная физика (§32 в ch4):
- Canvas 700×380, зелёный стол, 4 шара
- Тяни мышью от битка → прицельный вектор, отпусти → удар
- Реальные упругие столкновения по нормали
- Трение поля, отскоки от бортов, trails
- Stats: Σ p, Σ Ek
F19. Полёт ракеты (final4, финальный босс):
- Canvas 700×420 — космос со звёздами, Земля внизу
- 4 slider'а: m₀, m_f, v_газов, расход q
- Реальная физика: тяга F = q·u, g(h), сопротивление ρ(h)e^(-h/8000)
- Анимация ракеты с пламенем + перемещение по высоте
- Цель: 400 км (МКС)
- При успехе: +150 XP, localStorage 'phys9_F19_success'
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
§12 Charge Sandbox: canvas с динамическим добавлением зарядов.
Click → +заряд (или - через кнопку), drag для перемещения,
стрелки взаимодействия по Кулону (красные=отталкивание,
зелёные=притяжение). Кнопки '+/-', 'Очистить'.
§17 Field Visualizer: drag-зарядов с live перерисовкой
силовых линий. От каждого + рисуются 16 линий, идущих
по полю E через интегрирование шагами. Линии останавливаются
у − зарядов или вылетают за canvas.
§22 Закон Ома: SVG цепь батарея + резистор + лампа.
Scrubbers U (0.5-12 В), R (1-100 Ом). I=U/R обновляется
live, яркость лампы ∝ I (glow при I>0.3).
§25 Параллельные резисторы: SVG цепь с разветвлением.
Scrubbers R₁, R₂. Live расчёт R_общ = R₁R₂/(R₁+R₂),
I₁, I₂ для каждой ветви, общий I.
§28 Магниты: canvas с 2 drag-магнитами (N-S полюса).
При сближении inner полюсов (S-N) рисуются стрелки
притяжения с величиной по F~1/d².
§30 Опыт Эрстеда: SVG провод с током (scrubber -5..+5 А)
и компас под ним. Силовые линии магн. поля вокруг провода
(концентрические штриховые круги) с opacity ∝ |I|.
Стрелка компаса отклоняется по arctan(I), угол выводится.
F5. Машина Атвуда (§22):
- Canvas 640×420: блок с двумя массами на нити
- Slider'ы: m₁, m₂, трение в блоке
- Запуск: бо́льшая масса опускается, меньшая поднимается
- Физика: a = ((m₁-m₂)g - μ)/(m₁+m₂)
- Анимация: блок вращается, грузы движутся, размер пропорц. m
- Показ векторов сил тяжести (m₁g, m₂g) и натяжений (T) в покое
- Stats: a, T, v, t
F7. Лифт с динамометром (§24):
- Canvas 640×460: шахта с 5 этажами + большой циферблат справа
- Слева кабина с динамометром и грузом m
- Slider'ы: m груза, a разгона
- 5 режимов кнопок:
- Разгон ⬆ (hold) → a = +a_in
- Разгон ⬇ (hold) → a = -a_in
- Стоп → a = 0
- Свободное падение → a = -g (трос показывается пунктиром)
- Сброс
- 2 динамометра: мини в кабине + большой круглый (шкала 0..2.5g)
- Stats: P, P/(mg), v лифта, h высота
- Контекстный feedback: невесомость / норма / перегрузка / P<0
Подключение в ch2: F5 на p22 (закон Ньютона II), F7 на p24 (вес).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Полный план в стиле PLAN_PHYSICS_8: 5 содержательных глав, 42 параграфа,
6 виртуальных ЛР, 8 фаз реализации, ~62 800 LOC.
Особенности курса:
- Новая глава §§1–7 «Методы познания»: измерения, СИ, цена деления, погрешность.
- Глава 4 «Давление» — гидростатика, закон Паскаля, барометры (нет в phys 8).
- Глава 5 «Работа/мощность/энергия» — закон сохранения механической энергии.
- Палитра sky/blue (#0284c7), не пересекается с violet phys 8, amber phys 10, teal phys 11.
- Новые хелперы в phys.js: forceVector, dynamometer, connectedVessels,
hydraulicPress, mercuryBarometer, HillSlideSim, PendulumSim и др.
- Учтены уроки phys 9: cache-busting ?v=YYYYMMDD, sidebar-фикс на desktop,
delimiters для renderMathInElement, скобка вне $..$.
Главный визуал курса — закон сохранения механической энергии
(горка с тележкой / маятник, графики E_к(t)/E_п(t)/E_полн(t)).
ИТОГО: 5-й физический курс проекта, первый учебник 7 класса по физике.
Заменены оставшиеся stub'ы (Phase 1. coming soon) на реальные
интерактивы. Все 11 параграфов Ch1 теперь имеют flagship IV-6.
§2 Способы изменения U — Drag-piston:
- Цилиндр с газом, движущийся поршень (scrubber сжатия 0-100%).
- Scrubber Q для подачи тепла. Молекулы рисуются динамически
(количество ∝ T). Цвет газа по T через P8Helpers.thermal.tempColor.
- Readouts T (°C), U (отн.).
§4 Конвекция — Animated convection cell:
- Canvas-симуляция с 60 частицами, P8Anim.raf.
- Поток вверх по центру (нагретая лёгкая вода), вниз по краям.
- Скорость потоков ∝ мощности горелки (scrubber). Цвет частиц
по локальной T. Кнопки Пуск/Стоп.
§5 Излучение — Radiation balance:
- Лампа с 3 телами (чёрное, белое, зеркало) разной поглощающей
способности (0.95, 0.20, 0.05).
- Scrubber мощности лампы. Симуляция P8Anim.raf: T каждого тела
растёт ∝ absorption × power. Glow вокруг тёплых тел.
§7 Q=qm — Fuel burn:
- 3 кнопки палитры топлива (дрова q=10, уголь q=29, газ q=44 МДж/кг).
- Кастрюля с водой 1 кг. Сжигание выбранного топлива + scrubber массы.
- Q = qm, ΔT = Q/(c·m_в). Пар над кастрюлей при ΔT > 60°C.
§9 Q=λm — λ-meter:
- Select веществ (лёд, свинец, алюминий, железо) + scrubber массы.
- SVG: блок вещества + grad-arrow (Q) + расплав. Q = λ·m в реальном
времени.
§10 Скорость испарения — 3-scrubber sandbox:
- T (0-100°C), площадь (0.01-1 м²), ветер (0-10 м/с).
- Стрелки испарения вверх с количеством ∝ rate; наклон ∝ ветру.
- Качественная демонстрация трёх факторов.
§11 Скороварка — Pressure cooker:
- Canvas: кастрюля с водой, динамические пузыри.
- Scrubber давления 0.5-3 атм. T_кип = 100 + 20·log₂(p).
- Пар, T-индикатор столбиком.
Все интерактивы +10 XP при первом использовании.
Builders все на месте, JS парсится.
F3. Тахометр + спидометр + одометр (§11 в ch1):
- Canvas 640×400 с 3 аналоговыми приборами вверху
(тахометр a, спидометр v, одометр Δx mod 1000)
- Графики v(t) и a(t) внизу с горизонтальной цель-линией
- Кнопки «Газ»/«Тормоз» удержанием, «Отпустить» — coast-режим
(лёгкое торможение от трения)
- Slider'ы: a_газа, |a_тормоз|, цель скорости (по умолчанию 16.7 м/с)
- Рекорд скорости в localStorage
- Feedback при достижении цели
F4. Орбитальный конструктор (§17 в ch2):
- Canvas 640×480 (космос со звёздами)
- Планета (Земля) в центре, спутник запускается с r=200
- Slider'ы: M, v₀, угол α
- Кнопки: Запустить/Сброс/«Круговая орбита» (вычисляет v=√(M/r))
- Физика: F=GM/r² (G=1), Эйлер 8 шагов/кадр
- Trail орбиты до 1500 точек
- Классификация: падение/круговая/эллипс/убегание
- Период T через переход через ось x
- Feedback при крайних случаях
Подключение:
- ch1: phys9_flag_F3_dashboard.js + хук на p11
- ch2: phys9-flagships.css + base + F4 + хук на p17
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Предыдущий коммит eaee79d удалил builders §3, §5, §6, §8 из-за
greedy regex, который пересекал границы параграфов. Фактически
жалкие 211 КБ файла вместо 280 КБ.
redesign_p8_ch1_2.cjs переписан:
- Использует точный stub-text per-paragraph (с 'Новый интерактив §N'
в title — уникальный маркер).
- Нормализует CRLF/LF (ch1.html на диске CRLF, шаблон — LF).
- Делает простой h.replace(stubText, widget) без regex с greedy.
- Sanity-чек: все 11 builders должны остаться на месте после patch.
Восстановлены §3 Heat Conductor Bench, §6 Heat Mixer, §8 Phase
Diagram T(t) — full IV-6 interactives с drag/scrubbers/Anim.raf.
Размер ch1: 295851 байт. Все 11 builders + 5 IVs in каждом + IV-6
flagship в §1, §3, §6, §8.
Заменены stub'ы 'coming soon' на полноценные drag-and-drop виджеты:
§3 Тепловая лавочка (Heat Conductor Bench):
- SVG-sandbox 560×300 с горелкой (drop zone) и 4 стержнями
(медь λ=400, серебро λ=430, стекло λ=0.8, дерево λ=0.15).
- P8Drag.attach на каждый стержень → drop на горелку.
- При drop'е sim запускается: P8Anim.raf обновляет цвет
каждого сегмента стержня через P8Helpers.thermal.tempColor()
по log-нормализованной λ. Тепловая волна идёт по стержню.
- Readouts: материал, λ, T дальнего конца.
§6 Heat Mixer (Q=cmΔT):
- 2 ёмкости (m₁, T₁), (m₂, T₂) — рисуются с цветом по T.
- 4 scrubber'a (m₁, T₁, m₂, T₂) с live update SVG.
- Кнопка 'Смешать' → tween анимация в 1.2 с → итоговая T
через формулу теплового баланса (m₁T₁+m₂T₂)/(m₁+m₂).
- Readout T_итог, кнопка 'Сброс'.
§8 График плавления (Phase Diagram T(t)):
- T-t график 560×280 с осями (-20 до 120°C, 0 до 300 с).
- Фазовые области: лёд (синий), вода (голубой), пар (жёлтый).
- Реальная симуляция: c_льда=2100, c_воды=4200, λ=330000,
r=2300000. P8Anim.raf вычисляет накопление энергии и
фазовые переходы — плато на 0°C (плавление) и 100°C
(кипение).
- Scrubber мощности 100-2000 Вт. Кнопки Старт/Сброс.
- Readouts: фаза, T.
+10 XP за каждое успешное взаимодействие.
KaTeX-фикс в phys9_ch1_widgets.js (delimiters $...$ в renderMathInElement) и
исправление ловушки $(v_1+v_2)/2$ в §7 «Средняя скорость» уже были в HEAD
(коммит 5b075cd), но из-за агрессивного браузерного кеша JS-файлов пользователи
продолжали видеть старую версию: формулы как raw текст, ловушка как
($v_1+v_2)/2$ с битым синтаксисом.
HTML уже имеет no-cache meta-теги, но они не контролируют кеш связанных JS.
Добавляю query-string ?v=20260530 к phys.js и phys9_*.js на 5 страницах глав.
Визуальный редизайн ch1 Тепловые явления:
- Hero: заменён старый .hdr на новый .p8-hero с анимированным
градиентом (thermal-shift 14s), огненным SVG-watermark
справа (дышащая анимация 6s), live-meter в углу с пульсацией
и плавной анимацией значения 37 → 100 → 0 → -10 → 25 → 80 °C.
- Eyebrow 'Глава 1 · 11 параграфов', крупный title, sub-описание.
- Section watermarks: в каждой <section sec-pN> добавлены
тематические SVG (атом, конвекция, солнце, сосуд, фазовый
переход, пузыри и т.д.) с opacity .07 на правой стороне.
IV-6 §1 flagship interactive — Drag thermometer:
- SVG-sandbox 560×320 с 4 телами (лёд, вода, чай, пар) разной
T и относительной U.
- Draggable термометр (P8Drag.attach + P8Helpers.svg).
- При наведении на тело — изменяется цвет термометра по
P8Helpers.thermal.tempColor(), readout табло показывают
T (°C) и U (отн.).
- +5 XP за 12 сек исследования.
IV-6 stubs для §2-§11: 'Coming soon' плашки с тематическим
SVG-иконкой clock. Расширим в Phase 1.2.
Новый модуль frontend/js/phys9_finals.js:
1. РАСШИРЯЕТ window.checkNum чтобы поддерживать сигнатуру
(id, answer, unit, tol) — раньше legacy checkNum принимал только
sec для POOLS, из-за чего кнопки «Проверить» в финалах не работали.
2. ПРОГРЕСС-БАР под заголовком каждого finalN:
- Подсчитывает количество <input id="fin1-q1"...> в финале
- При правильном ответе обновляет % решённых
- +8 XP за каждую решённую задачу
3. АЧИВКИ:
- При 100% решённых задач финала — +50 XP + бэйдж
«★ МАСТЕР ГЛАВЫ» (физика9_chN_master)
- При всех 5 финалах — +150 XP + ачивка «МАГИСТР ФИЗИКИ 9»
(Wave G — финал курса)
Подключение во все 5 ch + хук на ensureBuilt вызывает
PHYS9_FINALS_INIT(id) для id вида final1..final5.
(linter добавил { delimiters, throwOnError:false } в renderMathInElement
вызовы во всех 5 widget-модулях — сохранено).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Новый модуль frontend/js/phys9_ch5_widgets.js — экспортирует
window.PHYS9_CH5_WIDGETS = { lr1..lr12: fn }.
Каждая ЛР содержит:
- 2-4 slider'а с параметрами измерений
- Автоматический расчёт результата
- Кнопка «Сдать работу (+30 XP)» с интеграцией в XP-систему
Виджеты:
- ЛР 1: средняя скорость на 2 участках
- ЛР 2: ускорение через 2 измерения s/t²
- ЛР 3: a_n по 10 оборотам шарика на нити
- ЛР 4: g через период математического маятника + погрешность
- ЛР 5: проекции силы на наклонной (F‖, F⊥)
- ЛР 6: g = 2h/t² свободное падение + погрешность
- ЛР 7: ЗСМЭ — сравнение Ep и Ek с расчётом потерь
- ЛР 8: F_A и V тела (вес в воздухе и в воде)
- ЛР 9: условие плавания — доля погружения, статус
- ЛР 10: равновесие рычага — l₂ для баланса
- ЛР 11: КПД наклонной — A_пол/A_зат
- ЛР 12: жёсткость пружины k через период
Подключено в physics_9_ch5.html через ensureBuilt hook.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
На десктопе (>980px) .col-side уже видна как sticky-колонка справа в grid 1fr 280px.
Клик по кнопке #sidebar-btn добавлял .col-side-backdrop.show — backdrop с
z-index:9990 затемнял всю страницу, перекрывая sticky-aside. Со стороны
выглядело как «ничего не открылось» — на самом деле появлялась чёрная вуаль.
Фикс: @media(min-width:981px) скрывает #sidebar-btn и подавляет показ backdrop.
На мобайле (≤980px) кнопка и overlay работают как раньше.
Применено в 51 файле: physics 8/9/10 chN, algebra 7/9/10/11 chN + 8 ch2-3,
geometry 7/8/9/11 chN, geometry_10 r1-4.
Новый модуль frontend/js/phys9_ch4_widgets.js — экспортирует
window.PHYS9_CH4_WIDGETS = { p31..p36: fn }.
Виджеты:
- §31 CALC: импульс p=mv с slider'ами m, v и бытовой аналогией
(футбольный мяч / автомобиль / грузовик и т.д.)
- §32 CALC: ЗСИ — упругий и неупругий удар двух тел. m₁, v₁, m₂, v₂ →
v₁', v₂', проверка сохранения импульса
- §33 DnD: 9 ситуаций → знак работы (A>0/A<0/A=0)
- §34 CALC: Ek+Ep с slider'ами m, v, h
- §35 CALC: ЗСМЭ — найти v в любой точке горки по высоте старта
(h_старт=5, h_тек=0 → v=9.9 м/с)
- §36 CALC: период маятника (математ./пружинный) — переключатель,
формула обновляется автоматически
Подключено в physics_9_ch4.html через тот же hook ensureBuilt.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Новый модуль frontend/js/phys9_ch3_widgets.js — экспортирует
window.PHYS9_CH3_WIDGETS = { p25..p30: fn }.
Виджеты:
- §25 CALC+VIS: равновесие рычага — 4 slider'а (m₁, l₁, m₂, l₂),
балка наклоняется при дисбалансе, статус (равновесие/перевешивание)
- §26 DnD: 8 механизмов → 3 категории (выигрыш в силе / расстоянии /
без выигрыша)
- §27 CALC: КПД наклонной плоскости — m, h, угол α, μ → A_пол, A_зат, η
- §28 DnD: 8 ситуаций → виды равновесия (устойчивое/неустойчивое/безразл.)
- §29 CALC: F_A=ρgV для разных жидкостей (вода/керосин/ртуть/спирт),
сравнение с весом, статус (плавает/тонет/висит в толще)
- §30 DnD: 5 жидкостей → группы плотности
Подключено в physics_9_ch3.html через тот же hook ensureBuilt.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Новый модуль frontend/js/phys9_ch2_widgets.js — экспортирует
window.PHYS9_CH2_WIDGETS = { p15..p24: fn }. Архитектура аналогична
ch1_widgets (хелперы дублируются для self-sufficient загрузки).
Виджеты:
- §15 CALC: F=Gm₁m₂/r² с slider'ами в показателях 10^a, бытовые
аналоги (Земля-Луна, Земля-человек)
- §16 DnD: 6 планет → группы по периоду (T<1, 1≤T<5, T≥5 лет)
- §17 CALC: связь T, ν, ω с переключателем «известная величина»
- §18 CALC+VIS: a_n=v²/R + анимированная точка по окружности
с векторами v (касательно) и a_n (к центру), пересчёт в g
- §19 CALC: F=kx закона Гука + перевод в массу подвешенного тела
- §20 DnD: 8 пар материалов → 3 группы по μ
- §21 DnD: 8 ситуаций → инерц/неинерц СО
- §22 CALC: F=ma + что будет за 1 с
- §23 CALC: g(h) для разных высот (МКС, геостационар, поверхность)
- §24 CALC: вес P=m(g+a) в лифте с классификатором режима
(норма/перегрузка/разгон/невесомость)
Виджеты подключены в physics_9_ch2.html через тот же hook ensureBuilt.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Новый модуль frontend/js/phys9_ch1_widgets.js — экспортирует
window.PHYS9_CH1_WIDGETS = { p1..p14: fn }.
Каждая функция инжектится в pN-body через расширенный ensureBuilt hook
после оригинального билда и блока POOLS-задач. Идемпотентно
(проверка class wg-phys9-extra-<id>).
Виджеты:
- §1 DnD: 8 объектов → точка / не точка
- §2 CALC: скорость катера отн. берега (slider v_катера, v_течения,
направление)
- §3 DnD: 8 величин → вектор / скаляр
- §4 CALC + SVG: проекции вектора по углу с тригокружностью
- §5 DnD: 6 траекторий → s=|Δr| или s>|Δr|
- §6 CALC: v=s/t с переводом в км/ч + бытовая аналогия
- §7 CALC: средневзвешенная ⟨v⟩ + ловушка «среднее арифметическое»
- §8 DnD: 6 уравнений x(t) → характер движения
- §9 CALC: время и место встречи двух тел
- §10 DnD: 6 признаков → знак мгновенной v
- §11 CALC: режим движения (ускорение/торможение/равномерное)
- §12 CALC: тормозной путь автомобиля
- §13 CALC: Δx и v при равноуск. + проверка v²−v₀²=2aΔx
- §14 DnD: 6 графиков v(t) → знак ускорения
Все виджеты используют:
- стандартные CSS-классы .wg, .sliders, .score-display, .drop-box
(из phys-textbook-widgets.css)
- палитру PHYS9_COLORS (тёмная тема работает автоматически)
- KaTeX для формул
- единый DnD движок через wireDnd
В ch1.html подключён скрипт + расширен hook _injectTasks вызывать
PHYS9_CH1_WIDGETS[id] после рендера задач.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
В Физике 8 ch1 §6, §7, §9, §11 уже имели IV-4 'Тренажёр N расчётных задач'.
У §1-5, §8, §10 IV-4 был только MCQ — числовых задач не было.
inject_p8_ch1_tasks.cjs добавляет IV-5 виджет после IV-4 в build_pN:
- §1 Внутр. энергия: 5 задач (T-конверсия, U vs масса/высота)
- §2 Способы изменения U: 5 (Q=ΔU+A, кин. энергия молота → тепло)
- §3 Теплопроводность: 5 (тепловой поток P=Q/t, зависимости от d, S, λ)
- §4 Конвекция: 5 (плотности тёплого/холодного, нагрев радиатором)
- §5 Излучение: 5 (солнечный поток, Стефан-Больцман упрощённо)
- §8 Плавление: 5 (Q=λm)
- §10 Испарение: 5 (Q=rm, испарение пота, лужи)
Всего 35 новых задач с автопроверкой числового ответа (±tol),
подсказкой-решением (KaTeX) и +20 XP при прохождении всей серии.
Используется существующий design system (.wg, .tinp, .feedback,
.score-display) — уже подключён через phys-textbook-widgets.css.
Новый модуль frontend/js/phys9_palette.js — экспортирует
window.PHYS9_COLORS с цветами для всех кинематических, динамических,
энергетических и геометрических величин Физики 9.
Структура палитры:
- velocity / acceleration / displacement / position / time
- force / forceGravity / forceFriction / forceNormal / forceSpring /
forceTension
- energyK / energyP / work / power
- body / bodyAccent / liquid / gas / surface
- angle / axis / grid / dashed
- plotPrimary / plotSecondary / plotTertiary
- text / textMuted / textLabel
- bg / bgSubtle / bgCard
- ok / warn / fail
Палитра автоматически переключается между светлой и тёмной темой
через get-проперти, проверяющий html.dark / body.dark.
Утилиты:
- PHYS9_COLORS.vector('F'|'v'|'mg'|...) — цвет вектора по типу
- PHYS9_COLORS.byClass('kinematic'|'dynamic'|...) — цвет по классу
Подключён во все 5 ch-страниц до phys9_legacy.js.
Подготовка к Phase 3 — перенос hardcoded #цветов в legacy на ссылки
PHYS9_COLORS.*.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>