Commit Graph

268 Commits

Author SHA1 Message Date
Maxim Dolgolyov e1d4a1e38a feat(geom7 ch4): Wave 8 — Глава 4 «Сумма углов треугольника» (§19-§26 + Финал)
- §19 Сумма углов = 180° (доказательство через параллельную)
- §20 Внешний угол = сумма двух не смежных
- §21 Сторона ↔ угол (больше → больше)
- §22 Неравенство треугольника |b-c|<a<b+c
- §23 Прямоугольные треугольники (катеты + гипотенуза)
- §24 4 признака равенства прямоугольных
- §25 Биссектриса как ГМТ + центр вписанной
- §26 Катет против 30° = c/2
- Финал: 5 боссов
- Cyan theme (#0891b2 → #22d3ee)
- Хелпер drawTriangleAngles + специальные SVG для каждого §
2026-05-29 09:08:44 +03:00
Maxim Dolgolyov 2b6ddef5c9 feat(alg9 ch4 final): Финал Главы 4 «Прогрессии» (5 боссов + ачивка) 2026-05-29 09:04:53 +03:00
Maxim Dolgolyov b66c688340 feat(alg9 ch4 wave3): §18 «Сумма геом.» + §19 «Бесконечно убывающая» 2026-05-29 09:01:45 +03:00
Maxim Dolgolyov 00bd7cada7 fix(geom7 ch2): расшифровка СУС/УСУ/ССС + правильная описанная окружность
- §9, §13: добавлены 'запоминалки' с расшифровкой СУС/УСУ/ССС
  (сторона-угол-сторона и т.д.) + латинский эквивалент
- Кнопки тренажёра, шпаргалка, водяные знаки, босс §13 — на ССС/СУС/УСУ
- §14: пересчитана описанная окружность. Вершины A,B,C теперь
  лежат точно на окружности с центром O и радиусом R=70.
  Серединные перпендикуляры выходят из середин сторон в O.
2026-05-29 08:56:33 +03:00
Maxim Dolgolyov 5ed21e4d2e feat(alg9 ch4 wave2): §16 «Сумма арифм.» + §17 «Геом. прогрессия» 2026-05-29 08:56:30 +03:00
Maxim Dolgolyov eb565081f6 feat(alg9 ch4 wave1): §14 «Числовая последовательность» + §15 «Арифм. прогрессия»
§14: 3 теор. карточки (определение, способы задания, монотонность) +
4 интерактива — конструктор последовательности (5 типов + точечная
диаграмма (n, a_n)), тренажёр вычисления a_n (6 задач), квикфайр
монотонности (3 кнопки), DnD-сортер «рекуррентно vs формула».

§15: 3 теор. карточки (определение и a_n = a_1 + (n-1)d, характеристическое
свойство, примеры) + 4 интерактива — конструктор арифм. прогрессии
(слайдеры a_1 и d + точки на прямой), двойной калькулятор a_n и d,
квикфайр «арифм. или нет» (6 заданий), тренажёр прогрессии (6 задач).

Добавлены CSS .wg/.tinp/.sliders/.score-display/.dnd-*/.drop-* и хелперы
makeCard, setupSorter, gcd, axes2D, plotFunc (по образцу ch1/ch2).
2026-05-29 08:51:52 +03:00
Maxim Dolgolyov 5c3ca4c1b6 feat(geom7 ch3): Wave 7 — Глава 3 «Параллельность прямых» (§15-§18 + Финал)
- §15 Признаки параллельности (3 признака через секущую, 8 углов)
- §16 Аксиома параллельных (5-й постулат + 2 следствия)
- §17 Свойства параллельных (обратные теоремы)
- §18 Углы со сторонами ∥ или ⊥
- Финал: 5 боссов
- Purple theme (#7c3aed → #a855f7)
- Helper drawParallelSecant() для рисунка 2 прямых + секущая + 8 углов с подсветкой пар
2026-05-29 08:50:52 +03:00
Maxim Dolgolyov d0cfff38c1 feat(alg9 ch3 final): Финал Главы 3 (5 боссов + ачивка) 2026-05-29 08:45:17 +03:00
Maxim Dolgolyov 8ecb8409eb feat(alg9 ch3 wave2): §12 «Окружность» + §13 «Метод интервалов»
§12 «Длина отрезка. Уравнение окружности»:
  - 3 теорет. карточки (формула расстояния, уравнение окружности, особые случаи).
  - IV1 «Окружность-конструктор»: 3 слайдера a/b/R, SVG-окружность + центр + радиус-линия + динамическое уравнение.
  - IV2 «Калькулятор расстояния»: 4 input + пошаговый разбор + мини-SVG с отрезком AB.
  - IV3 «Точка на окружности?»: 6 квикфайр-задач (да/нет).
  - IV4 «Тренажёр радиуса/центра/длины»: 6 задач на ввод числа.

§13 «Дробно-рациональные неравенства. Метод интервалов»:
  - 3 теорет. карточки (метод интервалов, правило знаков, пример).
  - IV1 «Числовая прямая знаков»: 5 неравенств, SVG-прямая с точками (закрашенными/выколотыми) и цветными знаками интервалов.
  - IV2 «Закрашена или выколота?»: DnD-сортер 6 карточек по 2 категориям.
  - IV3 «Сколько целых решений в [-5;5]»: 6 задач.
  - IV4 «Сумма концов интервалов»: 6 задач на ввод числа.

Добавлены setupSorter() + DnD CSS (.dnd-pool/.dnd-chip/.drop-box/.drop-items).
2026-05-29 08:42:33 +03:00
Maxim Dolgolyov 1b704b98e5 fix(geom7): убрана верхняя граница max-width — SVG растягиваются на всю ширину контейнера
Когда я добавил max-width:Wpx, SVG в одиночных карточках перестали
заполнять контейнер: в карточке шириной 800px SVG ограничивался
своим intrinsic размером (например 320px для §6), и казался мелким.

Правильная responsive-стратегия — width:100% БЕЗ верхней границы.
viewBox + preserveAspectRatio сами правильно отмасштабируют содержимое.
Теперь в одиночных карточках SVG занимает всю ширину, в flex-сетке —
свою долю.

Cache-bust ?v=6.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:38:45 +03:00
Maxim Dolgolyov cf88cb88dc fix(geom7): SVG снова растягивается на ширину контейнера (responsive)
Откатил неверный фикс: добавление width="W" height="H" атрибутов
заставило SVG рендериться в intrinsic-размере 180×160 px вместо
заполнения родительского контейнера. Из-за этого рисунки выглядели
маленькими.

Теперь svgBox использует правильную responsive-стратегию:
- viewBox="0 0 W H" — определяет систему координат
- preserveAspectRatio="xMidYMid meet" — сохраняет пропорции
- style="width:100%; max-width:Wpx; height:auto" — растягивает
  до ширины контейнера, но не больше intrinsic W; height auto
  держит правильное соотношение сторон через viewBox

Cache-bust ?v=5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:36:13 +03:00
Maxim Dolgolyov 41f6561357 feat(alg9 ch3 wave1): §10 «Дробно-рац. уравнения» + §11 «Системы нелинейных» + axes2D 2026-05-29 08:35:44 +03:00
Maxim Dolgolyov c4b4312b9a fix(geom7): svgBox теперь с явными width/height + видимый fallback
Скорее всего корневая причина исчезающих SVG в §5 — в svgBox был
только style="max-width:100%" без явных атрибутов width/height.
В flex-контейнере с inline-block детьми SVG без явных размеров
может сжаться до 0×0 в некоторых браузерах (особенно при не-100%
ширине контейнера).

Фикс:
1. svgBox: добавлены width="W" и height="H" атрибуты на <svg>,
   плюс height:auto в стиле — теперь SVG имеет гарантированно
   ненулевой размер и сохраняет пропорции при сжатии.

2. svgNotation в §5: если G не загружен, теперь показывается
   красный fallback-блок "⚠ Библиотека SVG не загружена.
   Обновите страницу с Ctrl+Shift+R" — пользователь сразу видит,
   что проблема в кэше.

3. Bump cache-bust до ?v=4 для geom7_svg.js — форсит
   обязательное обновление файла в браузерах, которые
   проигнорировали ?v=3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:33:57 +03:00
Maxim Dolgolyov cf5662087c fix(geom7): cache-bust geom7_svg.js (?v=3) + 3-й SVG в §5 (транспортир)
Скорее всего у пользователя был закэширован старый geom7_svg.js, из-за
чего часть API изменилась и SVG-блоки в §5 рендерились пустыми
(angleViz и notationVariant возвращали '' если G не было).

Что сделано:
1. Везде src="/js/geom7_svg.js?v=3" — форсит браузер скачать заново
   - geometry_7_ch1.html
   - geometry_7_ch2.html
2. notationVariant: function declaration внутри if(G) заменён на
   const arrow expression — для надёжности в strict mode + блоке
3. Добавлен 3-й SVG в §5 — карточка 5.2 «Измерение углов»:
   - полукруглый транспортир радиусом 90px с делениями каждые 10°
   - три цветных луча, отложенные на 40°, 90°, 140° от одной стороны
   - цветные подписи градусных мер в правильных местах

Теперь в §5 ТРИ SVG-рисунка:
- 5.1 «Что такое угол» — три обозначения одного угла
- 5.2 «Измерение углов» — транспортир с 3 примерами (НОВОЕ)
- 5.3 «Виды углов» — 4 типа углов с заливкой
- 5.4 «Биссектриса» — деление угла пополам

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:29:20 +03:00
Maxim Dolgolyov 34dd197390 feat(alg9 ch2 final): Финал Главы 2 «Функции» (5 боссов + ачивка) 2026-05-29 08:29:18 +03:00
Maxim Dolgolyov 70c5641452 feat(alg9 ch2 wave2): §8 «Чётные/нечётные» + §9 «Сдвиги графиков» 2026-05-29 08:26:11 +03:00
Maxim Dolgolyov bb40776fa8 feat(alg9 ch2 wave1): §6 «Функция, D(f), E(f)» + §7 «Свойства» + axes2D/plotFunc 2026-05-29 08:21:14 +03:00
Maxim Dolgolyov 31b40b0e99 fix(geom7): корневой баг G.angle (метки ∠1=∠2 садились в одну точку) + 2 новых SVG в §5
Корневая причина проблемы с наложенными метками углов в §6:

В G.angle формула центра метки была:
  midA = (a1 + a2) / 2 + (|delta| > π ? π : 0)

При a1≈-153° и a2≈+153° (как у ∠2 в §6) среднее даёт 0° —
ровно туда же, куда ставится метка ∠1 (a1≈+25°, a2≈-25°,
тоже среднее = 0°). Результат: обе метки в одной точке.

Правильная формула — идти от a1 на половину delta в направлении
sweep:
  midA = a1 + delta / 2

Это автоматически разносит метки противоположных секторов
в противоположные стороны. ∠1 уходит вправо, ∠2 — влево.

Также добавил 2 новых SVG в §5:
1. Карточка 5.1 «Что такое угол» — теперь содержит три варианта
   обозначения одного и того же угла: ∠BAC (полное), ∠A (короткое),
   α (греческая буква). Каждый — отдельный SVG с подсветкой угла
   жёлтым сектором, общая подпись внизу.

2. Карточка 5.4 «Биссектриса» — наглядный SVG: ∠BAC = 70°,
   биссектриса AD (пунктирная красная) делит его на две равные
   половинки по 35°. Полупрозрачная заливка зелёным/фиолетовым
   для каждой половины, дуги с одинаковыми штрихами как маркер
   равных углов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:18:40 +03:00
Maxim Dolgolyov a61b1e3c20 feat(alg9 ch1 wave3 + final): §5 «Преобразование» + Финал главы 1 (5 боссов + ачивка) 2026-05-29 08:14:15 +03:00
Maxim Dolgolyov 724c8a5817 fix(geom7 ch1): §6 — метки углов не накладываются на O; §5 — заливка секторов
§6 (вертикальные углы):
- SVG расширен 260×180 → 320×230
- Добавлены 4 полупрозрачных сектора как фон (красный для ∠1/∠2,
  оранжевый для ∠3/∠4) — сразу видно, какие углы вертикальны
- Метки ∠1, ∠2, ∠3, ∠4 теперь явные (со знаком "∠")
- Подпись O вынесена в (-26,-22) от вершины + пунктирная линия-указатель
  к самой точке — чтобы метка не перекрывала ∠1
- Чётко разнесены: ∠1, ∠2 (red, r=20) — на горизонтали;
  ∠3, ∠4 (orange, r=32) — на вертикали

§5 (виды углов):
- SVG расширен 140×120 → 180×150 (больше деталей)
- Каждый угол теперь имеет полупрозрачную заливку-сектор
  (цветом, соответствующим типу угла)
- Подпись типа угла увеличена до 12px, чётко читается
- Развёрнутый угол: полукруг закрашен, подпись 180° явная

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:11:01 +03:00
Maxim Dolgolyov cccbb64159 feat(alg9 ch1 wave2): §3 «Сложение и вычитание» + §4 «Умножение и деление» 2026-05-29 08:08:46 +03:00
Maxim Dolgolyov 100834e9b1 feat(geom7 ch2): Wave 6 — Глава 2 «Признаки равенства треугольников» (§8-§14 + Финал)
7 параграфов по учебнику Казакова 2022 (стр. 56-87):
- §8 Треугольники: виды по сторонам/углам, периметр, равные Δ
- §9 1-й (SAS) и 2-й (ASA) признаки — с SVG-иллюстрациями
- §10 Высота, медиана, биссектриса + замечательные точки
   (центроид/инцентр/ортоцентр); три SVG бок-о-бок
- §11 Равнобедренный Δ: свойство углов при основании,
   биссектриса = медиана = высота к основанию
- §12 Признаки равнобедр.: обратная к свойству, доп. признаки
- §13 3-й признак (SSS) — три цветных стороны с тиками
- §14 Серединный перпендикуляр + теорема о ГМТ +
   точка пересечения 3 серед. перпендикуляров = центр
   описанной окружности (с SVG треугольника+окружности)

Интерактивы (всего 14): викторины с цветными кнопками
(классификация Δ, SAS/ASA/SSS, высота/медиана/биссектриса,
равнобедр-ли, верно/нет), тренажёры (периметр, углы,
ГМТ-задачи).

Финал: 6 боссов × 5 этапов = 30 этапов.
Темы: §8, §9, §10-11, §12, §13, §14.

Реюз библиотеки geom7_svg.js — каждый § имеет SVG-иллюстрации
треугольников через G.polygon, G.angle, G.rightAngleMark и др.

emerald-тема (#059669). 1578 строк, JS 82 КБ, HTTP 119 КБ.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 08:06:40 +03:00
Maxim Dolgolyov 140f711e3c feat(alg9 ch1 wave1): §1 «Рациональная дробь» + §2 «Основное свойство, сокращение» 2026-05-29 08:03:28 +03:00
Maxim Dolgolyov a07e631e8e feat(alg9 phase0): skeleton + миграция учебника Алгебра 9
- 020_algebra_9_hub.sql: hub (slug 'algebra-9', indigo, 19 параграфов) + 4 главы
- algebra_9_hub.html: страница каталога с индиго-палитрой
- algebra_9_ch1..ch4.html: skeleton-страницы 4 глав
  * Глава 1 (amber): §1-§5 Рациональные выражения
  * Глава 2 (emerald): §6-§9 Функции
  * Глава 3 (violet): §10-§13 Дробно-рациональные уравнения и неравенства
  * Глава 4 (cyan): §14-§19 Прогрессии
- Все skeleton-файлы рабочие: переключение параграфов, theme toggle,
  search modal, sidebar, progress, XP. Stub-плейсхолдеры в buildPx().
- Наполнение параграфов запланировано на Phase 1+.
2026-05-29 07:56:14 +03:00
Maxim Dolgolyov 2ffe376b2d feat(geom7 ch1): Wave 5 — Глава 1 «Начальные понятия геометрии» (§1-§7 + Финал)
Главное приобретение волны: библиотека geom7_svg.js — задел на ВСЮ
геометрию 7. 14 функций-хелперов:
- point, segment, ray, line — базовые примитивы с подписями/тиками
- circle с опц. центром, радиусом, подписью R
- arc, angle — дуги углов через atan2; кратчайший путь
- rightAngleMark — L-форма ВНУТРЬ угла (полилиния по двум направлениям)
- protractor — полукруглый транспортир с делениями каждые 10°
- polyline, polygon — ломаная/замкнутый полигон
- parallelMark — стрелочки на отрезках
- svgBox — обёртка с сеткой и фоном
- distance, midPoint, vec, unit, perp, rotate — математика
- renderMath — KaTeX с правильными делимитерами

Глава 1 — 7 § + Финал по учебнику Казакова 2022 (стр. 8-50):
- §1 Повторение 5-6 классов (длина, единицы, точка между двумя)
- §2 Предмет геометрии (аксиомы vs теоремы, планиметрия/стереометрия)
- §3 Прямая, луч, отрезок, ломаная (SVG-иллюстрации каждого)
- §4 Окружность и круг (свойство точки относительно окружности)
- §5 Угол и виды углов (острый/прямой/тупой/развёрнутый — SVG)
   + биссектриса
- §6 Смежные и вертикальные углы (с SVG: дополнительные лучи + пересечение)
- §7 Перпендикулярные прямые (теоремы единственности)

Интерактивы: 2-3 на §, всего 17:
- викторины с цветными кнопками (тип угла, аксиома/теорема, верно/нет)
- тренажёры (длины, углы, биссектрисы, перпендикуляры)

Финал: 5 боссов × 5 этапов = 25 этапов. Темы: §1-2, §3-4, §5, §6, §7.

amber-тема, KaTeX, sidebar-шпаргалка с формулами,
прогресс/XP, /api/textbooks/geometry-7-ch1/progress.

JS парсится OK (75 КБ), HTTP 200, 113 КБ.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 07:53:10 +03:00
Maxim Dolgolyov ff78851310 fix(alg7 fx): KaTeX-делимитеры $...$ в визуализаторах §12-§13
В alg7-fx.js renderMathInElement() вызывался без опций — KaTeX
auto-render по умолчанию узнаёт только \(...\) и \[...\], а
не $...$. Поэтому формулы в виз. квадрата суммы и разности
квадратов отображались как обычный текст (см. скриншот пользователя).

Фикс: общий хелпер ALG7.renderMath(root), который вызывает
renderMathInElement с теми же делимитерами, что прописаны в
страницах глав ($$, $, \[\], \(\)).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:27:54 +03:00
Maxim Dolgolyov 790c2e9445 feat(alg7 ux): Wave 5 — UX-буст для всех 4 глав (комбо + анимации + 2 viz)
Сделано:
1. /css/alg7-fx.css — универсальные эффекты:
   - shake (тряска) при неправильном ответе
   - pulse (зелёное свечение) при правильном
   - combo-badge (огненный шильдик ×3, ×5, ×10) при сериях
   - streak-индикатор в углу с пульсацией
   - sparkles (искры) при успехе
   - стили для двух новых визуализаторов

2. /js/alg7-fx.js — система комбо + визуализаторы:
   - MutationObserver автоматически отслеживает .feedback по всем
     четырём главам без правки feedback() в каждой
   - комбо-милестоны: 3 → +5 XP, 5 → +15, 10 → +50, 15 → +75, 20 → +100
   - бонус автоматически уходит через window.addXp(), который
     уже есть на window благодаря top-level function declarations
   - ALG7.buildQuadSumViz() — большой квадрат (a+b)² с 4 цветными
     областями (a², ab, ab, b²); слайдеры a, b; режим (a+b)/(a-b);
     клик по области → подсветка в формуле; живые числа
   - ALG7.buildDiffSquaresViz() — 3-этапная анимация a²-b²=(a-b)(a+b):
     1) большой квадрат с вырезанной угловой b²
     2) пунктирная линия разреза в L-форме
     3) перестроенный прямоугольник со сторонами (a-b)×(a+b)

3. Подключено во всех 4 главах одной строкой <link>/<script>.

4. Ch2 §12: добавлен 4-й интерактив — геометрическая визуализация
   квадрата суммы/разности. Школьник видит ПОЧЕМУ (a+b)²=a²+2ab+b².

5. Ch2 §13: добавлен 3-й интерактив — анимированное геометрическое
   доказательство разности квадратов. Жмёшь «Шаг» → L-форма
   расклеивается и собирается в прямоугольник.

Эффекты работают везде где есть .feedback — все боссы, все
тренажёры, все викторины. Не требует правки логики каждой главы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:25:02 +03:00
Maxim Dolgolyov e1c05da294 fix(geom8 ch1): пропущен закрывающий $ в SIDEBARS p1 'Число диагоналей'
В SIDEBARS p1 (line 516, шпаргалка боковой панели) у формулы числа
диагоналей \$\dfrac{n(n-3)}{2} не было закрывающего \$.
KaTeX видел незакрытый блок $...$ — отображал как сырой текст:
'Число диагоналей — $\dfrac{n(n-3)}{2}'.

Исправлено: добавлен закрывающий $.

Полный аудит KaTeX по всем 4 главам Геометрии 8 — это была
единственная найденная ошибка. Остальные $...$ блоки чисты.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:16:21 +03:00
Maxim Dolgolyov 83f807fbad feat(alg7 ch4): Wave 4 — Глава 4 «Системы линейных уравнений» (§21-§25 + Финал)
ФИНАЛЬНАЯ глава Алгебры 7! Последние 5 параграфов:
- §21. Линейное уравнение с двумя переменными ax+by=c
- §22. График — прямая (особые случаи a=0, b=0)
- §23. Система: одно решение / нет / бесконечно
- §24. Два способа: подстановка и сложение
- §25. Текстовые задачи через систему (растворы, монеты, движение)

Интерактивы:
- §21: пара-решение (викторина); выразить y через x; найти переменную
- §22: 3-слайдер a/b/c с живым SVG-графиком (включая особые случаи
  параллельных осям прямых); принадлежность точки; пересечения с осями
- §23: пара-решение системы; число решений (3 категории) — SVG-иллюстрация
  пересекающихся/параллельных/совпадающих прямых
- §24: тренажёр подстановки (5 задач); тренажёр сложения (5 задач);
  выбор удобного способа (5 пар) с объяснением «почему»
- §25: тренажёр текстовых задач (6 задач: груши/яблоки, копилка,
  монеты, кролики/цыплята); выбор корректной системы по условию

Финал: 5 боссов × 5 этапов = 25 этапов. Финальный босс — текстовые
задачи на системы (растворы, кофе/чай, кролики/цыплята).
При завершении ВСЕГО финала засчитывается достижение
«Алгебра 7 — пройдена полностью!».

coordSVG расширен поддержкой формы ax+by=c (включая вертикальные
x=c/a). cyan-тема (#0891b2), KaTeX, 7 терминов глоссария.

Алгебра 7: 4 главы × 100% контента = курс полностью реализован.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:14:03 +03:00
Maxim Dolgolyov 8c8c180eea fix(geom8 ch1): §4.1 tick-марки на правильных серединах + §4.2 дуги B/D на внутренней стороне
§4.1 'Параллелограмм + диагональ':
- Tick-марки для пары AB/CD рисовались на (116,103)-(130,97)
  и (216,103)-(230,97). Но midpoint AB = (77,100), а не (123,100)
  как указано в комментарии — агент ошибся в арифметике.
- Пересчитаны точно через перпендикуляр к каждому сегменту:
  AB tick at midpoint (77,100); CD tick at midpoint (223,100).
  Двойные tick'и для пары AB=CD=b, одиночные для BC=AD=a.
- Метки сторон 'a' и 'b' перепутаны: AB была помечена 'a' вместо 'b',
  AD помечена 'b' вместо 'a'. Исправлено по правилу:
  a = горизонтальная пара (BC, AD), b = наклонная пара (AB, CD).

§4.2 'Основные свойства':
- Дуги углов B и D использовали sweep=1 (большая 245° внешняя дуга
  через ВНЕШНЮЮ область параллелограмма). Должно быть sweep=0
  (короткая 115° внутренняя дуга через ВНУТРЕННОСТЬ).
- Подписи β сдвинуты ближе к дугам внутри полигона.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:03:35 +03:00
Maxim Dolgolyov 84d4ac5bd6 feat(alg7 ch3): Wave 3 — Глава 3 «Уравнения, неравенства, функция» (§15-§20 + Финал)
6 параграфов по учебнику Арефьевой/Пирютко 2022:
- §15. Линейные уравнения ax=b — три случая по корням
- §16. Текстовые задачи: возраст, движение, покупки (алгоритм составления)
- §17. Числовые неравенства — три свойства + сложение/умножение
- §18. Линейные неравенства — алгоритм + особые случаи (0·x>b, 0·x<b)
- §19. Функция — аргумент, f(x), область определения, нули, график
- §20. Линейная функция y=kx+b — наклон, сдвиг, расположение прямых

Новый helper: coordSVG() — координатная плоскость с сеткой, осями,
прямыми и точками. Используется в §20 интерактивах (слайдер k/b)
и для иллюстрации y=2x-3 в карточке теории.

Интерактивы:
- §15: 3 интерактива (сколько корней — викторина; реши; уравнения со скобками)
- §16: 1 интерактив (тренажёр текстовых задач — 6 задач)
- §17: 2 интерактива (изменится ли знак; оценка выражений)
- §18: 3 интерактива (реши простое; со скобками; особые случаи 0·x)
- §19: 3 интерактива (функция или нет; найди f(x0); найди нуль)
- §20: 4 интерактива (СЛАЙДЕР k и b с живым SVG-графиком; угол и нуль;
  параллельны/пересекаются/совпадают; принадлежит ли точка)

Финал: 5 боссов × 5 этапов = 25 этапов. Темы: §15-16, §17, §18, §19, §20.

violet-тема (#7c3aed), KaTeX, глоссарий (15 терминов), Ctrl+K поиск,
sidebar-шпаргалка с формулами, прогресс/XP, синхронизация с
/api/textbooks/algebra-7-ch3/progress.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 22:22:13 +03:00
Maxim Dolgolyov 6d6bed53d4 feat(geom8 ch1): полный редизайн SVG в §1-§7 (кроме §3 Интерактив 1)
Все теоретические карточки §§1-§7 переделаны с нуля по единому
стандарту качества:
- Все вершины полигонов через тригонометрию (cx+R·cos θ, cy+R·sin θ)
- Маркеры прямого угла — настоящие L-формы внутри (polyline V+9u,
  V+9u+9w, V+9w), а не трассы по кромке
- Tick-марки равенства сторон — перпендикулярно сегменту через
  единичный вектор
- Метки параллельности '>' с правильной ориентацией
- Подписи вершин — Unbounded font-weight 800, OUTSIDE полигона
- Размеры viewBox с запасом 18-25px для подписей

Затронуты:
§1: theory cards 1.1-1.5 (многоугольник, выпуклость, диагонали,
    периметр, названия) — 5 SVG
§2: 2.1-2.3 (триангуляция, правильные, пример n-gon) — 3 SVG
§3: 3.1, 3.3 (внешний угол треугольника, pie chart 360°) — 2 SVG
    Интерактив 1 (slider hexagon с 60° на каждой вершине) НЕ ТРОНУТ
§4: 4.1-4.3 (параллелограмм + диагональ, свойства, примеры 8/5) — 3 SVG
§5: 5.1-5.3 (свойства 1+2, диагонали пополам, сосед.углы) — 3 SVG
§6: 6.1-6.3 (3 признака, признак 1 доказ., признак 3 доказ.) — 3 SVG
§7: 7.1-7.3 (прямоугольник, диагонали равны, примеры с d=10/d=13) — 3 SVG

Всего: 22 SVG-карточки переделаны с нуля. Все 17 builder проходят
jsdom-тест. File +357 LOC (804 ins / 447 del).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 22:09:07 +03:00
Maxim Dolgolyov 641b6332a4 feat(alg7 ch2): Wave 2 — Глава 2 «Выражения и преобразования» (§4-§14 + Финал)
11 параграфов по учебнику Арефьевой/Пирютко 2022:
- §4. Числовые/буквенные выражения, область определения
- §5. Тождество, тождественные преобразования
- §6. Одночлен (коэффициент, степень, стандартный вид)
- §7. Действия с одночленами (умножение, возведение в степень)
- §8. Многочлен, подобные, степень многочлена
- §9. Сложение и вычитание, раскрытие скобок (+/-)
- §10. Умножение/деление многочлена на одночлен
- §11. Умножение многочленов (a+b)(c+d)
- §12. Квадрат суммы и разности (a±b)²
- §13. Разность квадратов a²-b²=(a-b)(a+b)
- §14. Разложение на множители (вынесение, группировка, ФСУ)

Каждый § = 2-4 карточки теории + 2-3 интерактива (слайдер,
DnD-сортировка, викторина, тренажёр с проверкой ответа).
В §12 — 3 интерактива (раскрытие, свёртка, быстрый счёт).

Финал: 6 боссов × 5 этапов = 30 этапов, прогресс/HP-бар/подсказки/рестарт.
Босс 1: выражения и тождества, 2: одночлены, 3: многочлены+скобки,
4: умножение, 5: ФСУ, 6: разложение на множители.

emerald-тема, KaTeX, глоссарий (19 терминов), Ctrl+K поиск,
sidebar-шпаргалка, прогресс/XP, синхронизация с /api/textbooks/algebra-7-ch2/progress.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 22:07:41 +03:00
Maxim Dolgolyov 641d62ac5f fix(geometry8): exhaustive SVG correctness audit — 12 fixes in §1-§7
Fixes applied (§1-§7 buildP1-buildP7 only):

§1.1 (Fix 11): Pentagon viewBox 170→185; C/D vertex labels at y=176 and
side label 'c' at y=174 were clipped — now visible.

§1.3 (Fix 1): Hexagon — added 3 missing diagonals (only 6 of 9 drawn);
expanded viewBox 160→175; caption moved from y=170 (clipped) to y=171.

§1.5 (Fix 2): Octagon — stray vertex circle and diagonal endpoints at
(140,16) replaced with actual 8th vertex (74,26); corrected two diagonal
endpoints accordingly.

§2.1 (Fix 12): Pentagon triangulation viewBox 165→178; A₃/A₄ vertex
labels at y=166 clipped → moved to y=172; caption moved y=156→y=174.

§2.2 (Fix 9): Equilateral triangle was isosceles (sides ~70,66,70);
replaced points to make all sides ≈62.4.

§2.3 (Fix 3): Nonagon viewBox 160→185; bottom vertices at y=170 were
clipped; caption moved to y=180.

§3.1 (Fix 10): Fixed misleading comment ("beyond A" → "beyond B").

§3.2 (Fix 4): Hexagon external angle extension line and arc were outside
viewBox width=280; redesigned to extend upward within bounds; viewBox
height expanded to 172.

§4.2 (Fix 5): Parallelogram angle arcs — C and D arcs were completely
swapped (drawn at each other's vertices); recalculated all arc endpoints
from unit vectors along polygon sides.

§4.3 (Fix 6): Side labels 8 and 5 swapped on example parallelogram
(AB=CD=8, BC=DA=5); corrected positions.

§4.3 (Fix 7): Angle arcs at A and C misplaced; recalculated endpoints
to correctly span each corner angle.

§6.1 (Fix 8): Признак 2 SVG used undefined marker #arr causing invisible
arrows; replaced with inline tick + polyline chevron marks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 21:50:10 +03:00
Maxim Dolgolyov c23375dc5f feat(alg7 ch1): Wave 1 — Глава 1 «Степени» полностью (§1-§3 + Финал)
Реализация по учебнику Арефьевой/Пирютко 2022, §1-§3:

§1. Степень с натуральным показателем — определение + 5 свойств + знак степени
§2. Степень с целым показателем — a⁰=1, a⁻ⁿ=1/aⁿ + знак + те же 5 свойств
§3. Стандартный вид числа — a·10ⁿ, порядок, алгоритм, сравнение, действия

Каждый параграф: 4 карточки теории + 4 интерактива:
- Слайдер-конструктор (степень-машина / a⁰ / a⁻ⁿ / a·10ⁿ)
- DnD сопоставление (свойства ↔ формулы / знаки)
- Викторина с обратной связью (знак / сравнение)
- Тренажёр с проверкой ответа (упрощение / стандартный вид / действия)

Финал: 5 боссов × 5 этапов = 25 этапов с HP-баром, подсказками, рестартом.
Тема боссов: натуральные / целые / стандартный вид / космос / финал.

Всё остальное: KaTeX-рендеринг, глоссарий-tooltip, Ctrl+K поиск, sidebar,
прогресс/XP, синхронизация с /api/textbooks/algebra-7-ch1/progress.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 21:38:48 +03:00
Maxim Dolgolyov df8b5ff18b fix(geom8 ch1): 5 drag-интерактивов — фикс stale closure после innerHTML replace
Корневая причина: каждый redraw() заменял SVG через innerHTML,
уничтожая элемент svgEl который onMove захватил в замыкании через
const svgEl = wrap.querySelector('svg'). На следующем pointermove
svgEl.getBoundingClientRect() возвращал {left:0,top:0,w:0,h:0} —
вершина прыгала в начало координат SVG, drag разваливался.

Применено к 5 интерактивам:
1. §4 Конструктор параллелограмма
2. §5 Живой параллелограмм — все свойства
3. §7 Живой прямоугольник — равенство диагоналей
4. §8 Признак прямоугольника — живая демонстрация
5. §9 Живой ромб

Что изменилось:
- Состояние (p4Active, p4Vname, p4OffX/Y и т.д.) вынесено на уровень
  модуля, ВНЕ redraw().
- Один pointerdown-listener на wrapper-div через делегирование событий
  (ev.target.closest('[data-v]')).
- clientToSvg() делает свежий document.getElementById(SVG_ID) на
  каждый вызов — не закрепляется на устаревшем DOM-узле.
- SVG получают стабильный id.
- viewBox.baseVal для точного coordinate scaling.
- Offset capture на pointerdown (нет snap-to-pointer).
- touch-action:none на SVG root.
- Hit area r=16 (visible r=8) — легче попасть на touch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 21:31:01 +03:00
Maxim Dolgolyov e6b2d7f321 fix(geometry8ch1): audit fixes — 6 errors corrected across §§1–16 and Final
- §1 octagon SVG: removed extra 9th vertex (was 9-gon, now proper 8-gon)
- §2 nonagon SVG: removed 2 extra vertices (was 11-gon, now proper 9-gon)
- §2 boss task 4: ans:168 → ans:157.5 (angle of regular 16-gon)
- §13 boss task 4: hint corrected (BC=2·M₁M₂ → AB=2·M₂M₃)
- §15 card 15.2: «нижнее основание» → «верхнее основание» for CD
- Final1 boss 4: swapped «бо́льшей»/«меньшей» labels for diagonals (AC=10 is shorter, BD=17 is longer)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 21:20:46 +03:00
Maxim Dolgolyov e8767ed30d feat(text7): Wave 0 — каркас Алгебры 7 и Геометрии 7 (hubs + миграции + стабы)
- docs/PLAN_ALGEBRA_7_GEOMETRY_7.md: полный план реализации (содержание, архитектура, волны)
- 018_algebra_7_hub.sql: hub algebra-7 (sort=6) + 4 ch (§1-§3, §4-§14, §15-§20, §21-§25)
- 019_geometry_7_hub.sql: hub geometry-7 (sort=7) + 5 ch (§1-§7, §8-§14, §15-§18, §19-§26, §27-§31)
- algebra_7_hub.html: 4-карточный hub в pink-теме (Арефьева/Пирютко 2022)
- geometry_7_hub.html: 5-карточный hub в blue-теме (Казаков 2022)
- 9 стаб-страниц глав со ссылкой назад в свой hub (заглушки до реализации волн 1-9)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 21:13:56 +03:00
Maxim Dolgolyov 5df801daf8 fix(geom8 ch1): drag-интерактивы + §7 живой прямоугольник + §16 интерактив 3
Drag-фикс (12 интерактивов):
Корневая причина — el.setPointerCapture(ev.pointerId) вызывался при
pointerdown, потом redraw() заменял innerHTML, удаляя элемент
с захваченным pointer. На touch-устройствах поток событий терялся.

Применено ко всем drag-обработчикам §1, §4, §5, §8, §9, §10, §11,
§12, §13, §14, §15, §16:
- Удалён setPointerCapture (бесполезен после innerHTML replace)
- Добавлен ev.preventDefault() после проверки кнопки
- Добавлен e.preventDefault() в начале onMove
- window.addEventListener('pointermove', onMove, {passive: false})
- Флаг active для защиты от stale events

§7 «Живой прямоугольник — равенство диагоналей» — полностью переписан:
- A фикс, C draggable (13px hit area, cursor:grab)
- Прямоугольник всегда axis-aligned
- Обе диагонали dashed разного цвета (зелёная AC, янтарная BD)
- Двойные риски равенства на каждой диагонали
- Подписи длин у каждой диагонали в реал-тайме
- Хелпер sqMark() рисует правильные L-маркеры прямого угла во всех
  4 углах прямоугольника, направленные внутрь
- Info-панель: AB, BC, периметр, площадь + постоянно зелёная карточка
  'Диагонали AC = BD' с обоими значениями

§16 Интерактив 3 'Доказательство признака 1 пошагово' — переписан:
5 шагов с чёткими SVG-состояниями: Дано → опустить высоты DH₁,CH₂ →
равные углы при основании + равные высоты → конгруэнтность по
'угол-катет' → вывод AD=BC. Подсветки треугольников, штрихи равных
сторон, маркеры прямого угла у оснований высот.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 21:12:09 +03:00
Maxim Dolgolyov 7cea060179 fix(geom8 ch4): §12 малая дуга вместо большой + §16 слайдер и калькулятор
§12 Card 12.1, 12.3 (угол между касательной и хордой):
- Дуга AB рисовалась с sweep=1 — это ДЛИННАЯ дуга через левую сторону
  (250°). Но теорема говорит про малую дугу 'внутри угла' между
  касательной и хордой, которая на ПРАВОЙ стороне (~110°).
- Изменено на sweep=0 — теперь рисуется правильная малая дуга
  справа, та самая что 'inside the angle'.

§16 Интерактив 1 'PT² = PA·PB':
- Слайдер угла секущей имел range 5..60° но математически возможен
  только до asin(R/PO)=asin(62/147)≈25°. При угле > 25° секущая
  пролетает мимо окружности (disc<0), SVG не рендерится — пользователь
  видел пустой блок.
- Range изменён на 2..22° (с запасом). Default value 12°. Теперь
  всегда рендерится корректный SVG с касательной + секущей.

§16 Интерактив 3 'Калькулятор':
- В результате 'PT = \u221a(PA\u00b7PB)' писались литеральные
  unicode-escape строки (двойные backslash в template literal
  становятся одиночными в строке, но \u221a не trigger escape
  → литеральная строка '\u221a'). Заменено на настоящие
  символы √ и · в коде.
- Добавлен SVG слева от калькулятора с диаграммой PT²=PA·PB
  (касательная PT, секущая PAB из внешней точки P).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 20:59:44 +03:00
Maxim Dolgolyov e8bd098427 fix(geom8 ch4): §12-§14 — корректная геометрия SVG (касательная, хорды, секущие)
§12 (Угол между касательной и хордой):
- Card 12.1, 12.3: полностью переписаны. Касательная — настоящая
  горизонтальная прямая в точке A на нижнем краю окружности;
  хорда AB к точке B на верхней дуге; маркер угла α радиуса 18
  между направлением касательной и хордой. Подсветка дуги AB
  только обводкой (stroke), без заливки fan-сектора.
- Интерактив 1: добавлен корректный маркер угла, дуга stroke-only.

§13 (Угол между двумя хордами):
- Card 13.1: переписан. 4 точки A,B,C,D через тригонометрию
  (тестовые углы 200°/20°/80°/280°). Хорды AB и CD пересекаются
  в P=(141,96) — настоящее аналитическое пересечение.
  Дуги AC и BD — тонкими толстыми обводками БЕЗ заливок.
- Интерактив 1: подсветки дуг переделаны на stroke-only.

§14 (Угол между секущими из внешней точки):
- Card 14.1: переписан с корректной геометрией секущих. P=(272,92)
  снаружи; обе секущие — настоящие прямые через P; все 4 точки
  пересечения вычислены аналитически (через квадратное уравнение).
- Интерактив 1: добавлен хелпер secantPoints(P, O, R, θ) который
  гарантирует, что точки пересечения лежат на одной прямой с P.
  Заменены произвольные углы на окружности на правильное построение.

Все §12-§14 теперь геометрически точны: касательные действительно
касательны, хорды действительно пересекаются в указанной P, секущие
действительно прямые через внешнюю точку.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 20:52:50 +03:00
Maxim Dolgolyov ac10ebdd21 feat(geom8): Wave 5 — финал Главы 4 (ПОСЛЕДНИЙ параграф Геометрии 8!)
Часть 1: 16 mini-cards со SVG-иконками и формулами в KaTeX
для всех §1-§16 (касательные, дуги, вписанные углы, произведения).

Часть 2: интерактивная карта связей (SVG 620×360):
центральный узел 'ОКРУЖНОСТЬ' → 3 ветви (Касательные §1-7,
Углы §8-14, Отрезки §15-16). Кликабельные узлы с формулами.

Часть 3: 7 интегрированных боссов (по 10 XP):
  Босс 1 (§1+§3): R=5, OP=13 → PT=12, периметр=34
  Босс 2 (§9+§11): диаметр AB, ∠CAB=35° → ∠ACB=90°, ∠ABC=55°
  Босс 3 (§10+§13): хорды, дуги 70°/50° → ∠P=60°, ∠ADC=35°
  Босс 4 (§14): две секущие, дуги 100°/40° → ∠P=30°
  Босс 5 (§15): PA=4 PB=9 PC=6 → PD=6
  Босс 6 (§16): PT=8 AB=12 → PA=4, PB=16
  Босс 7 (§7): R₁=6 R₂=2 d=10 → ℓ=√84≈9.17

Часть 4: финальная плашка с confetti + achievement
'Мастер окружностей Главы 4' + 50 XP бонус + переход к /textbooks.

File: 6712 → 7381 LOC. ГЛАВА 4 ПОЛНОСТЬЮ ЗАВЕРШЕНА.

🎉 ВСЯ ГЕОМЕТРИЯ 8 ЗАВЕРШЕНА:
  Глава 1 (Многоугольники, 16§+финал): 5560 LOC
  Глава 2 (Площади, 15§+финал): 7144 LOC
  Глава 3 (Подобие, 9§+финал): 4709 LOC
  Глава 4 (Окружности, 16§+финал): 7381 LOC

Итого: 56 параграфов + 4 финала = 60 разделов, 24,794 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 20:33:48 +03:00
Maxim Dolgolyov 9b6a9adaf9 fix(geom8 ch4): аудит §12-§16 — корректные точки на окружности и пересечения хорд
Найдено 6 геометрических SVG-фиксов (LaTeX везде чист):

§13 Card 13.1 (две хорды): точки A,B,C,D были смещены от окружности,
точка P не лежала на обеих хордах. Пересчитаны через
(cx+R·cos θ, cy+R·sin θ) с r=65; P=(126,74) — настоящее пересечение
хорд AB и CD.

§13 Proof: углы 210°/290°/350°/70° давали хорды AC и BD которые
НЕ пересекались внутри окружности. Изменены на 220°/10°/130°/300° —
P=(119,71) внутри.

§14 Card 14.1: точки секущих не лежали на окружности и линии от P
не проходили через обе точки пересечения. Пересчитаны как реальные
пересечения секущих с окружностью при углах ±20°/-10°.

§14 Proof: A,B,C,D построены как окружностные точки без проверки
коллинеарности с P. Заменены на построение через хелпер _sec()
с углами ±15° от P.

§15 Card 15.1: P=(116,87) но хорды пересекались в (114.7,88.1) —
2px разница. P сдвинут на (114,88); концы хорд пересчитаны
точно на окружность r=65.

§16 Card 16.1: T не была настоящей точкой касания (OT⊥PT нарушено).
T пересчитана как настоящая касательная из P через asin(R/|OP|);
добавлен маркер прямого угла; A,B заменены на реальные пересечения
секущей.

KaTeX-эскейпы в §12-§16 проверены — все \angle, \dfrac и т.п.
корректно удвоены. Математика в задачах проверена выборочно — без
ошибок.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 20:15:22 +03:00
Maxim Dolgolyov b400366f06 feat(geom8): Wave 4 Главы 4 — §12-§16 (углы и произведения отрезков в окружности)
§12 Угол между касательной и хордой: slider дуги, live угол=½дуги;
4-шаговое доказательство через диаметр и вписанный угол; калькулятор
двунаправленный; тренажёр; DnD; босс.

§13 Угол между двумя хордами: 2 слайдера дуг, пересечение через
уравнения прямых, live угол=½(дуга₁+дуга₂); 4-шаговое доказательство
через вспомогательный треугольник; калькулятор; тренажёр; DnD; босс.

§14 Угол между секущими из внешней точки: 2 слайдера дуг,
live угол=½|дуга₁−дуга₂|; 4-шаговое доказательство через внешний
угол △PAD; калькулятор; тренажёр; DnD; босс.

§15 Произведение отрезков пересекающихся хорд: SVG-слайдеры
положения и угла, live PA·PB vs PC·PD через квадратное уравнение
пересечения хорд с окружностью; 4-шаговое доказательство через
подобие △APC∼△DPB; калькулятор (3 отрезка → 4-й); тренажёр; DnD; босс.

§16 Квадрат касательной = произведение секущих: slider угла секущей,
касательная с маркером ⊥; live PT²=PA·PB; 4-шаговое доказательство
через подобие △PTA∼△PBT; калькулятор 3-в-1; тренажёр; DnD; босс.

GLOSSARY: +угол между касательной и хордой, +пересекающиеся хорды,
+полусумма дуг, +полуразность дуг, +квадрат касательной.

File: 4642 → 6712 LOC. ВСЕ 16 §§ Главы 4 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:53:57 +03:00
Maxim Dolgolyov cf3ffb4a46 fix(geom8 ch4): §8.1 — маркер угла α на правильном направлении
Маркер центрального угла α был нарисован дугой M 142,81 A 22,22 0 0,1 142,119
— стартовая точка (142,81) находилась в направлении -40° от O (между
OA и горизонталью), что НЕ совпадало с направлением радиуса OA (-60°).
Дуга выглядела не между радиусами а сбоку.

Исправлено: dуга теперь от (131,81) до (131,119) — точки лежат на
радиусах OA и OC на расстоянии 22 от центра (угол -60° и +60°
соответственно). Подпись α тоже подвинута чуть левее.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:28:06 +03:00
Maxim Dolgolyov 497a4e92a0 fix(geom8 ch4): §8.1 и §8.3 — переделаны рисунки крупнее и нагляднее
Card 8.1 (центральный угол): viewBox 260×160 → 280×200. Добавлена
заливка сектора (pie slice) пастельно-жёлтого, дуга AC выделена
КРАСНОЙ толстой линией (stroke 3.5), угол α у центра — большая
оранжевая дуга радиуса 22. Точки на окружности с подписями A,C
крупными Unbounded. Подпись '⌣AC = α°' справа от дуги, не
накладывается. Подзаголовок 'центральный угол ∠AOC' в углу.

Card 8.3 (длина дуги): viewBox 260×150 → 280×190. Радиусы теперь
СПЛОШНЫЕ синие (раньше были пунктирные серые — невидимые). Подпись
R на радиусе OA крупная JetBrains Mono. Дуга ℓ выделена красной
толстой линией (4px). Угол α у центра — большая дуга радиуса 28.
Формула 'ℓ = (α/360°)·2πR' внизу как референс.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:26:44 +03:00
Maxim Dolgolyov 8b2dca16ad fix(geom8 ch4): доп. LaTeX-эскейпы в §8 §9 §11 (4 локации)
§8 Интерактив 1 slider label: \alpha (был \alpha → 'alpha' в DOM)
§8 Интерактив 4 wg-help: формула длины дуги \ell = \dfrac{\alpha}{360}\cdot 2\pi R
§9 Интерактив 1 slider label: \alpha
§11 Card 11.1 $$...$$ блок: \text, \implies, \angle

Всего 9 команд KaTeX исправлены — теперь рендерятся как формулы,
а не текст 'alpha', 'dfrac' и т.п.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:22:32 +03:00
Maxim Dolgolyov 121713b5d8 fix(geom8 ch4): прямые углы в §7 + LaTeX в §8 и §11 slider
§7 Card 7.1 (общая внешняя касательная теория): добавлены 4 правильных
маркера прямого угла (L-формы) во всех 4 точках касания + радиусы
от O₁/O₂ к каждой точке касания.

§7 Card 7.2 (доказательство формулы): переделан рисунок — добавлена
точка K (основание перпендикуляра из O₂ на O₁T₁) с подписью,
правильные L-маркеры в T₁, T₂, K; подписи R₁, R₂, R₁−R₂, d.

§7 Интерактив 1 (live внешняя касательная): добавлены 4 маркера
прямого угла во всех точках касания, вычисляемых через единичные
векторы радиуса и касательной + красные точки на T₃,T₄ + 4 пунктирных
радиуса от центров.

§8 LaTeX: \alpha, \smile, \ell, \dfrac, \cdot, \pi
в card 8.1 (центральный угол) и 8.3 (длина дуги).
§8 Интерактив 1 help: \angle ABC.

§11 Интерактив 1 help: \angle ACB.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:18:14 +03:00
Maxim Dolgolyov c36043c80e fix(geom8 ch4): LaTeX-эскейпы в §9, §10, §11 + точка T в §6.2 (внутреннее касание)
LaTeX-баги (в template literals \angle/\dfrac/\smile/\sqrt/\neq
должны быть удвоены):
- §9.1: формула $$\angle ABC = \dfrac{1}{2}\,\angle AOC = ...$$
- §9.2: пункт 1 'центр на стороне угла' с \angle AOC = 2\angle ABC
- §9.3: задача 'центральный = 110°, найти вписанный' — все формулы
- §10.1: формула $$\angle AB_1C = \angle AB_2C = \angle AB_3C = ...$$
- §11.2: доказательство '\smile AB = 180°', '\angle ACB = ½·180° = 90°',
  '\neq A,B'
- §11.3: задача 'диаметр AB=10, AC=6, найти BC' — формула Пифагора
  с \sqrt

§6.2 Признаки касания — внутреннее касание:
Точка T была нарисована в (145,60) — это самый ЛЕВЫЙ край большой
окружности O₁=(185,60) R₁=40, то есть на ПРОТИВОПОЛОЖНОЙ стороне
от меньшей окружности. Правильно: T должна быть в (225,60) — на
правом краю обеих окружностей (185+40 = 200+25 = 225), там где
они действительно касаются. Подпись T тоже сдвинута.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:12:55 +03:00
Maxim Dolgolyov dac075b886 fix(geom8 ch4): §8-§11 — точная геометрия SVG + LaTeX в §10.2
§10 Card 10.2 'Доказательство следствия': в KaTeX-формулах
\angle и \dfrac были записаны с одинарным \, поэтому JS
template literal заменял \a на a, и KaTeX рендерил 'angleAB_1C'
и 'dfrac12' как текст. Исправлено на \\angle и \\dfrac.

SVG-фиксы:
- §8.1: дуга начиналась не с вершины A — исправлено.
- §9.1: все три точки A,B,C были вне окружности на 4-7px —
  пересчитаны на окружность r=65.
- §9.2 'случай O на стороне AB': переделана компоновка —
  B наверху, A в нижней антиподе, O на отрезке BA (диаметр),
  C на окружности справа.
- §9 Интерактив 1 (slider): подпись угла AOC вылетала вправо
  из viewBox — выровнена по центру.
- §10.1 и §10.3: точки на окружности 4-7px смещены — пересчитаны.
- §11.1 и §11.3: маркер прямого угла в C был горизонтальной
  скобкой, не связанной с CA/CB. Пересчитан через единичные
  векторы — теперь корректно показывает 90° между катетами.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 19:08:54 +03:00