Commit Graph

271 Commits

Author SHA1 Message Date
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
Maxim Dolgolyov caef49f387 fix(geom8 ch4): §5 Card 5.3 — верхняя сторона угла под 30° (касается обоих кругов)
Было: верхняя сторона угла нарисована до точки (258,56) — это угол
26.66° к горизонтали (half=13.33°). Круги вписаны по формуле
r=d·sin(15°), т.е. ожидался угол 30° (half=15°). Поэтому верхняя
сторона визуально не касалась окружностей — проходила выше.

Стало: верхняя сторона до точки (257,38) — угол ровно 30°
((cos30°,-sin30°)·280 = (242.5,-140)). Биссектриса под 15°.
Оба круга теперь геометрически точно вписаны и касаются обеих
сторон угла.

Добавлены 4 точки касания T₁/T₂/T₃/T₄ с подписями, метки O₁/O₂
сдвинуты чуть-чуть.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:59:58 +03:00
Maxim Dolgolyov 892024f6a3 fix(geom8 ch4): §4 — маркеры прямого угла к центру O во всех SVG
Тот же системный фикс что и в §3: маркер прямого угла в точке
касания T должен быть ВНУТРИ треугольника OTA (между T→O и T→A).
Раньше использовалось +u_radius (наружу от центра) — теперь
-u_radius (к центру O).

Затронуты:
- §4 Card 4.1 (задача построения): 2 маркера в T₁, T₂
- §4 Card 4.3 (длина касательной): 1 маркер в T
- §4 Интерактив 1 (пошаговое построение, шаги 4-5): 2 маркера

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:52:56 +03:00
Maxim Dolgolyov ca6b93fb57 fix(geom8 ch4): §3 — маркеры прямого угла НА ВНУТРЕННЕЙ стороне касательной (к O)
Маркер прямого угла в точке касания T должен быть на той стороне,
где геометрически находится угол 90° — внутри треугольника OTA,
т.е. между направлениями T→O и T→A.

Раньше использовалось +u_radius (от центра наружу) → маркер
оказывался ВНЕ круга на дальней от A стороне. Изменено на
-u_radius (внутрь, к центру). Теперь маркер показывает угол
90° между OT и tangent правильно.

Затронуты:
- §3 Card 3.1 (статичная)
- §3 Интерактив 1 (slider OA)
- §3 Интерактив 2 (пошаговое доказательство)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:50:22 +03:00
Maxim Dolgolyov 1d6f97e636 fix(geom8 ch4): §3 §4 §5 — корректная геометрия SVG и подписи
Проверено 11 SVG в §3, §4, §5 — 11 исправлено.

§3 Касательные из одной точки:
- Card 3.1: пересчитаны точки касания T₁,T₂ по корректной формуле
  T_x=O_x+R²/OA, T_y=O_y±R·AT/OA (раньше координаты были произвольные);
  маркеры прямого угла направлены правильно (CCW perp для верхней,
  CW perp для нижней); все подписи вне линий касательных.
- Интерактив 1 (slider): найден баг — sinA/cosA были перепутаны
  в T_x/T_y. Теперь T₁x=cx+R*sinA, T₁y=cy−R*cosA. Маркер прямого
  угла T₂ исправлен с CCW на CW. ViewBox расширен под широкий OA.
- Интерактив 2 (proof): тот же фикс формулы + маркер прямого угла.

§4 Построение касательной:
- Card 4.1 (построение): пересчитаны точки касания T₁,T₂ как
  пересечение исходной окружности O(90,100,r=50) и вспомогательной
  M(165,100,r=75) — раньше точки были вне окружности.
- Card 4.3 (формула): точка касания T была на (107,56) — вне
  окружности. Пересчитана на T=(89,59) с правильным маркером.
- Интерактив 1 (шаги): то же исправление формулы и направлений
  маркеров прямого угла.
- Интерактив 2 (live): сlider tangent positions через радиальные
  unit-векторы для подписей вне линий.

§5 Окружности в углу:
- Card 5.1: центр окружности был на O(135,145) — не на биссектрисе
  и не равноудалён от сторон. Пересчитан на O(157,148) с r=35
  по формуле от вершины угла. T₁,T₂ — проекции центра на стороны.
  Добавлены маркеры прямого угла в обеих точках касания.
- Card 5.3: две окружности на биссектрисе с r=d·sin(α/2).
- Интерактив 1 (slider): добавлен маркер прямого угла в T₂
  (отсутствовал); направление T₁-маркера исправлено.
- Интерактив 2 (proof): то же.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:45:22 +03:00
Maxim Dolgolyov 2a6c214cd5 feat(geom8): Wave 3 Главы 4 — §8-§11 (центральный/вписанный углы)
§8 Центральный/вписанный углы. Дуга: slider центрального угла α от
0 до 360° с подсветкой дуги; SVG с вписанным углом и его позицией;
DnD центральный/вписанный/ни тот ни другой; калькулятор длины дуги
ℓ=α/360·2πR; тренажёр; босс.

§9 Свойство вписанного угла: dual slider центральный α + вписанный
β=α/2 на одной дуге; 5-шаговое доказательство для случая O на стороне
вписанного угла через равнобедренный △ и внешний угол; двунаправленный
калькулятор; DnD верно/неверно; тренажёр; босс.

§10 Вписанные углы на одну дугу: SVG с дугой AC и 3 вершинами
B₁,B₂,B₃ на другой части — все углы AB_iC равны; 3-шаговое
доказательство через половину центрального; калькулятор; DnD; тренажёр;
босс.

§11 Вписанный угол на диаметр: slider позиции C — угол ACB всегда
90°, прямоугольный треугольник вписан с гипотенузой = диаметр;
4-шаговое доказательство; калькулятор через Пифагор (диаметр+катет
→ другой катет); тренажёр; DnD; босс.

File: 3060 → 4549 LOC. 11 of 16 §§ Главы 4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:19:26 +03:00
Maxim Dolgolyov 0bcb9e5f2e fix(geom8 ch4): §3 — подписи T₁/T₂/AT уходят с касательных, §2.1 — убран лишний cx/cy
§3 Интерактив 1 'Две касательные из внешней точки': подписи T₁ и T₂
теперь располагаются по радиальному направлению (наружу от центра)
с большим отступом, не лежат на касательной линии. Подписи длин
AT₁ и AT₂ вынесены ПЕРПЕНДИКУЛЯРНО касательным наружу (через
вычисление нормали к каждой касательной). Все подписи теперь
крупнее (font 13, Unbounded для вершин, JetBrains Mono для длин)
и читаются без наложения на линии.

§3 Интерактив 2 'Доказательство касательных по шагам': те же фиксы
плюс расширен viewBox 260×200 → 280×220 для размещения подписей.

§2 Card 2.1: убран лишний атрибут cx='100' cy='95' на <line> элементе
радиуса (line не имеет атрибутов cx/cy — игнорировалось браузером,
но загромождало код).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 18:00:32 +03:00
Maxim Dolgolyov cc7551755b feat(geom8): Wave 2 Главы 4 — §4-§7 (построение касательной, вписанные в угол, расположение окружностей, общая касательная)
§4 Построение касательной: пошаговое SVG-построение (6 шагов через
вспомогательную окружность с диаметром OA), live-слайдеры R и |OA|,
калькулятор AT=√(OA²−R²), DnD шагов построения, тренажёр, босс.

§5 Окружности вписанные в угол: слайдеры d и угол 2α — окружность
всегда касается обеих сторон, биссектриса проходит через центр;
5-шаговое доказательство; калькулятор r=d·sin(α/2); DnD утверждений;
тренажёр; босс.

§6 Взаимное расположение двух окружностей: 3 слайдера R1, R2, d с
живым определением одного из 5 случаев (внешние/касание внешнее/
пересекаются/касание внутреннее/внутренние); DnD-сортер 8 карточек
по 4 категориям; калькулятор; тренажёр; босс.

§7 Длина общей касательной: SVG внешней касательной с формулой
ℓ=√(d²−(R₁−R₂)²) + SVG внутренней касательной с ℓ=√(d²−(R₁+R₂)²);
4-шаговое доказательство через прямоугольник KT₁T₂O₂; калькулятор
обеих формул; тренажёр; босс.

File: 1638 → 3042 LOC. 7 of 16 §§ Главы 4 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 17:17:57 +03:00
Maxim Dolgolyov 17e42990ad feat(geom8): Wave 1 Главы 4 — §1-§3 (касательная)
§1 Касательная. Признак: слайдер d от 0 до 2R — секущая/касательная/не
пересекает с цветовым индикатором; 5-шаговое доказательство через
прямоугольный △OTM; калькулятор вида прямой; DnD по 3 корзинам;
тренажёр; босс.

§2 Свойство касательной: слайдер угла T — касательная ⊥ радиус OT всегда,
маркер 90° следует за T; 5-шаговое доказательство от противного;
калькулятор AT=√(|OA|²−R²); тренажёр; DnD утверждения; босс.

§3 Касательные из одной точки: слайдер |OA| — две касательные из A,
AT₁=AT₂ с тиками равенства; 5-шаговое доказательство через равенство
прямоугольных △OAT₁ и △OAT₂; калькулятор |AT|; тренажёр; DnD; босс.

GLOSSARY: +точка касания, +радиус.
File: 470 → 1549 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:27:54 +03:00
Maxim Dolgolyov 219e488d7f fix(geom8): KaTeX в feedback — рендерить $...$ после установки innerHTML
В сообщениях feedback (после Проверить) формулы с $...$ показывались
как сырой LaTeX-источник, например 'Повтори: $S_1/S_2 = k^2.$'.
Причина: feedback() устанавливал innerHTML но не вызывал renderMath()
на этом элементе, поэтому KaTeX не обрабатывал формулы.

Добавлен try{renderMath(elm);}catch(e){} после установки innerHTML
во всех 3 файлах (ch1, ch2, ch3).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:05:21 +03:00
Maxim Dolgolyov a7ca9a7463 fix(geom8 ch1): §7 §10 — корректные маркеры прямого угла во всех фигурах
§7 Прямоугольник:
- Card 7.1 (теория): 4 path-маркера которые тянулись ПО кромке
  прямоугольника заменены на правильные polyline L-формы (9px),
  направленные строго внутрь.
- Card 7.2 (свойство диагоналей): не было ни одного маркера прямого
  угла — добавлены 4 на всех вершинах.
- Интерактив 1 «Живой прямоугольник»: маркеры стояли только в 2 углах
  через <rect> которые частично выходили за прямоугольник. Заменены
  на 4 правильных polyline вычисляемых из Math.min/max границ —
  работают при любом направлении перетаскивания вершины B.

§10 Квадрат:
- Card 10.1 (определение): 4 path-маркера трассировавшие по кромке
  заменены на правильные L-формы.
- Card 10.2 (свойства): то же.
- Card 10.3 (формулы): добавлены маркеры на все 3 квадрата (6-7px,
  в цвет каждого квадрата).
- Интерактив 1 (слайдер): один <rect>-маркер в углу A заменён на
  4 правильных polyline-маркера на всех вершинах ABCD, пересчёт
  по каждому изменению слайдера.

Геометрия маркера: для угла V с направлениями u,w внутрь —
polyline V+9u → V+9u+9w → V+9w. Маркер всегда внутри фигуры,
оба сегмента перпендикулярны кромкам.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 16:04:07 +03:00
Maxim Dolgolyov 5ecae8a078 fix(geom8): кнопка Проверить — feedback теперь показывается
Баг: у элементов .feedback стоит inline style='display:none' и CSS-класс
.feedback с display:none. Класс .feedback.ok должен переключать на
display:block, но inline-стиль имеет ВЫСШУЮ специфичность и перекрывает
классовый display:block.

В итоге onclick-обработчики работали корректно (вызывали feedback()),
но сообщение оставалось скрытым из-за inline display:none.

Симптом: 'нажимаешь Проверить — ничего не происходит' в боссах, DnD,
тренажёрах, квизах — везде где есть .feedback элемент.

Фикс: функция feedback() теперь явно сбрасывает elm.style.display='block'
после установки класса. Добавлен null-check на elm.

Затронуто 3 файла (ch1, ch2, ch3). Все feedback-элементы во всех
параграфах теперь показываются после клика по Проверить.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:58:50 +03:00
Maxim Dolgolyov e0d36b45c0 fix(geom8 ch3): убрать наложения двух треугольников и подписей
Системная переработка SVG-рисунков с парой треугольников ABC + A'B'C':
второй треугольник теперь спатиально отделён от первого (gap 30-50px),
viewBox расширен под обе фигуры + поля для подписей, аннотации перенесены
к верху/низу области.

Затронутые места:
1. §3 ИНТЕРАКТИВ 1 (slider k) — T2 анкорится в B2x=Cx+50, динамический W
2. §5 Card 5.1 — viewBox 350×195, label k= перенесён к низу
3. §5 ИНТЕРАКТИВ 2 Step 1 — viewBox 320×170, gap 37px, label наверху
4. §6 ИНТЕРАКТИВ 2 Step 1 — viewBox 330×165, gap 39px, label наверху
5. §7 Card 7.1 — viewBox 310×185, gap 38px, ratio внизу
6. §7 ИНТЕРАКТИВ 2 Step 1 — viewBox 310×160, gap 33px
7. §8 «через параллель» — полный редизайн viewBox 340×250: E внутри,
   биссектриса с метками, CE параллельная с штрихами, BD/DC цветные
8. §9 Card 9.1 — gap 44px, label вверху
9. §9 ИНТЕРАКТИВ 2 Step 1 — gap 38px, label вверху
10. §9 БОСС task 1 — viewBox 310×158, gap 42px, label вверху

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:55:09 +03:00
Maxim Dolgolyov ad5435dace fix(geom8): убрать LaTeX-квадратики □ (\square/\blacksquare) — заменить на 'ч.т.д.'
В концах доказательств использовался LaTeX-маркер \square (или
\blacksquare) для QED. KaTeX рендерит его как пустой квадрат U+25A1
который во многих браузерах отображается как 'тофу' (битый глиф).

Заменены во всех 3 главах геометрии:
- \$\square\$  → <b>ч.т.д.</b> (HTML текст)
- \$\blacksquare\$ → <b>ч.т.д.</b>
- \quad\square в $$ → закрытие $$ + 'ч.т.д.'
- \square ABCD (как символ параллелограмма) → просто ABCD

Затронуто: 29 в ch1 + 26 в ch2 + 1 в ch3.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:39:53 +03:00
Maxim Dolgolyov d7d74b1553 fix(geom8 ch3): SVG в §3/5/6/9 + раскрытие сокращений УУ/СУС/ССС
Sокращения признаков подобия везде заменены на полные русские названия:
- УУ/ДД → 'по двум углам' / 'Признак по двум углам'
- СУС/СДС → 'по двум сторонам и углу' / 'Признак по двум сторонам и углу между ними'
- ССС → 'по трём сторонам' / 'Признак по трём сторонам'
Сокращения оставлены только в скобках после полного имени для первого
упоминания (например, 'по двум углам (УУ)'). Затронуты: PARAS, SIDEBARS,
TIPS, заголовки виджетов в §4-§9, finale, DnD-чипы и квизы.
В KaTeX-выражениях формальных доказательств SAS/SSS оставлены (это
международная нотация конгруэнтности).

SVG-фиксы:
- §3 (карточка 3.1): viewBox расширен 360×155, маленький треугольник
  отодвинут на 50px от большого (B'=245,135), не накладывается.
- §5 (карточка 5.1): viewBox 360×160, маленький треугольник на 45px
  правее.
- §6 (карточка 6.1): viewBox 300×192 (выше), треугольник смещён вниз,
  аннотации перенесены к низу карточки.
- §8 (доказательство через параллель): полный редизайн SVG (viewBox
  0 -30 340 215): точка E чётко отделена от A, добавлены штрихи
  параллельности CE∥AD, подпись 'CE ∥ AD'.
- §9 (слайдер k): динамическое размещение B2x =
  Math.max(C1x+30, 200), второй треугольник не накладывается на
  первый при больших значениях k.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:36:18 +03:00
Maxim Dolgolyov 70c6fe0054 feat(geom8): Wave 5 — финал Главы 3 (шпаргалка, карта связей, 7 боссов)
Часть 1 — Итоговая шпаргалка: 9 mini-cards с SVG-иконкой и формулой
в KaTeX для каждого § (от Фалеса до отношения площадей).

Часть 2 — Интерактивная карта связей (SVG 620×340):
центральный узел 'Подобие треугольников' → 3 признака (УУ, СУС, ССС)
→ следствия (Фалес, прямая||стороне, биссектриса, площади, m:n).
Клик подсвечивает связи и показывает описание с KaTeX.

Часть 3 — 7 боссов (по 10 XP):
  Босс 1: параллель MN — k=8/12, AN=12
  Босс 2: биссектриса AB=15 AC=10 BC=14 — BD=8.4, DC=5.6
  Босс 3: УУ+площади k=1.5, S=12 — S'=27
  Босс 4: деление 20 см в 3:2 — AC=12, CB=8
  Босс 5: СУС+косинус AB=8 AC=12 ∠=60° k=1.5 — A'B'=12, A'C'=18, BC≈11
  Босс 6: высоты и площади k=2 — h'=3, S=36
  Босс 7: средняя линия M середина AB, MN∥BC — MN=10.5, AN/NC=1, ratio=0.25

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

File: 4095 → 4709 LOC. ГЛАВА 3 ПОЛНОСТЬЮ ЗАВЕРШЕНА.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:14:59 +03:00
Maxim Dolgolyov 8d4eab659c feat(geom8): Wave 4 Главы 3 — §8-§9 (биссектриса, отношение площадей подобных)
§8 Свойство биссектрисы треугольника: SVG с слайдерами AB/AC/BC,
автоматическое построение точки D на BC через BD/DC=AB/AC, цветовая
подсветка отрезков BD/DC; 5-шаговое доказательство через параллель
CE∥AD, равнобедренный △ACE и теорему Фалеса; калькулятор BD,DC по
сторонам; DnD верна ли пропорция; тренажёр; босс.

§9 Отношение площадей подобных треугольников: SVG двух подобных
треугольников со слайдерами k=0.5..3 и S₂, live S₁=k²·S₂;
5-шаговое доказательство через S=½·a·h и подстановку отношений;
двухрежимный калькулятор (k,S₂→S₁ или S₁,S₂→k=√(S₁/S₂)); DnD
по k²=4 vs k²=9; mini-quiz из 5 вопросов с обобщением на произвольные
подобные фигуры; тренажёр; босс.

File: 3234 → 4095 LOC. Все 9 §§ Главы 3 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 15:04:15 +03:00
Maxim Dolgolyov f9f6a04c88 fix(geom8 ch3): аудит §1, §3, §5, §6, §7 — корректная геометрия SVG
§1 Доказательство Фалеса: точки пересечения трёх параллельных секущих
со второй стороной угла были заданы фиксированно (y=65/92/119), но
по геометрии должны вычисляться из наклона второй стороны
(slope=-80/230). Пересчитано во всех 5 шагах + добавлены метки точек,
штрихи равенства параллельных отрезков, корректные подписи A'/B'/C'.
Step 5: вертикальные линии заменены на отрезки между двумя секущими.

§3 Card 3.1: треугольник A'B'C' не был подобен ABC (отношения
сторон 1.59 vs 2.06). Пересчитан как точное масштабирование ABC
с коэффициентом k=2 относительно якоря B. Также фикс баги
'a/a*k/k' (всегда =1) в подписи коэффициента.

§5 Card 5.1: малый треугольник не подобен большому (отношения
1.71/2.03/1.88). Пересчитан с k=2 от якоря B.
Босс задача 1: тоже не подобен — исправлен на k=3.
Step 1 доказательства: тоже исправлен на k=5/3.

§6 Card 6.1: треугольники имели разные углы ∠A (68.6° vs 50.8°)
и непропорциональные стороны. Пересчитано с равными углами в A
и пропорцией k=2.
Босс задача 1: viewBox расширен, координаты исправлены на k=1.5.
Step 1: исправлено на k=2.

§7 Card 7.1: стороны не пропорциональны (2.68/1.68/1.80).
Пересчитано с k=2.5 от якоря B.
Step 1: исправлено на k=2.

Интерактивные слайдеры (§3 k, §5 α/β/k, §6 SAS, §7 SSS) — проверены,
они корректно вычисляют координаты по слайдерам.

Всего: 18 статичных + 5 интерактивных SVG проверено, 12 исправлено.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:55:00 +03:00
Maxim Dolgolyov e0e3280404 fix(geom8 ch2): §12 равносторонний крупнее + §14 тип треугольника крупнее + §11 доказательство Пифагора корректное + §15 таблица троек красивее
§12 Равносторонний — слайдер a: viewBox 300×260 → 420×320, scale 10 → 14;
треугольник теперь занимает большую часть SVG. Добавлены точки и крупные
буквы вершин (Unbounded), цветовые подписи h и S в SVG.

§14 Тяни стороны — тип треугольника: viewBox 320×240 → 440×320, переписана
функция drawTriSVG: всегда использует наибольшую сторону как основание
(стабильная компоновка), масштаб подгоняется под доступную площадь.
Крупные подписи вершин с точками, форматированные подписи сторон.

§11 Доказательство квадрат (a+b)²: 2-й, 3-й и 4-й треугольники имели
оба катета одинаковой длины (=a вместо a и b). Полностью переписана
геометрия:
  - T1 (top-left): legs a (вертикаль) и b (горизонталь)
  - T2 (top-right): legs a (горизонталь) и b (вертикаль)
  - T3, T4: повторение поворотом 90°
  - Внутренний квадрат (off,off+a)-(off+b,off)-(off+S,off+b)-(off+a,off+S)
    с реально равными сторонами c=√(a²+b²)
Каждый треугольник — своего цвета. Шаги переработаны: 1) большой квадрат
с (a+b)², 2) 4 треугольника, 3) внутренний квадрат c², 4) уравнение
площадей, 5) вывод c²=a²+b². ViewBox 360×240 → 440×380.

§15 10 троек Пифагора: каждая тройка теперь в виде карточки с фоном
(зелёный для примитивных, оранжевый для кратных), бейджем 'ПРИМ' / '×k',
мини-SVG треугольником, формулой a²+b²=c² и hover-анимацией. Подобранные
тройки: 6 примитивных (3-4-5, 5-12-13, 7-24-25, 8-15-17, 9-40-41,
20-21-29, 11-60-61, 12-35-37) + 2 кратные (6,8,10) и (10,24,26).
Большая детальная SVG с подписями + 'a²+b²=c²' в численном виде.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:41:24 +03:00
Maxim Dolgolyov 4803f970c1 feat(geom8): Wave 3 Главы 3 — §6-§7 (второй СУС и третий ССС признаки подобия)
§6 Второй признак (СУС — сторона-угол-сторона): SVG двух треугольников
с 4 слайдерами (AB, AC, угол A, k), второй автомасштабируется через SAS;
5-шаговое доказательство; калькулятор через теорему косинусов; DnD
подобны/не подобны (5 пар); тренажёр; босс.

§7 Третий признак (ССС — три стороны): SVG двух треугольников с 4
слайдерами (a, b, c, k), оба строятся через теорему косинусов с проверкой
неравенства треугольника; 5-шаговое доказательство; калькулятор проверки
пропорциональности 6 сторон; DnD; mini-quiz из 5 вопросов на все 3
признака (УУ, СУС, ССС); тренажёр; босс.

File: 2338 → 3182 LOC. 7 of 9 §§ Главы 3 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:35:06 +03:00
Maxim Dolgolyov ac3aaeadb2 feat(geom8): Wave 2 Главы 3 — §4-§5 (параллельная стороне, первый признак ДД)
§4 Свойство параллельной прямой: SVG-треугольник со слайдером положения
MN (t=0..1), live коэффициент подобия k, подсветка △AMN; 5-шаговое
доказательство через соответственные углы; калькулятор AM,AB,BC→MN+k;
DnD пропорция верна/неверна; тренажёр; босс.

§5 Первый признак подобия (по двум углам): SVG двух треугольников
с 3 слайдерами (α, β, k), оба строятся через теорему синусов с
автоподобием; 5-шаговое доказательство через сумму углов 180° и
вспомогательное построение; DnD подобны/не подобны по углам; калькулятор
2 угла + сторона → соответствующая сторона; тренажёр; босс.

File: 1557 → 2338 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:25:45 +03:00
Maxim Dolgolyov a7c5f10fd4 feat(geom8): Wave 1 Главы 3 — §1-§3 (Фалес, деление m:n, определение подобия)
§1 Теорема Фалеса (обобщённая): SVG-угол со слайдером количества параллелей
2-6 и наклона стороны 10-60°, live пересчёт отношений; 5-шаговое
доказательство; калькулятор пропорций a/b=c/x; DnD; тренажёр; босс.

§2 Деление отрезка в отношении m:n: SVG-построение циркулем-линейкой
со слайдерами m,n=1-6, анимация с лучом и параллельной через Pm;
калькулятор AB,m,n→AC,CB; 4-шаговое доказательство формулы координат;
тренажёр; босс.

§3 Определение подобных треугольников: SVG два треугольника со слайдером
k=0.5-3.0, второй масштабируется коэффициентом подобия, стороны подписаны;
калькулятор a,b,c,k→a',b',c'; DnD подобные/неподобные пары; тренажёр;
mini-quiz из 4 теоретических вопросов; босс.

GLOSSARY: +пропорциональность.
File: 429 → 1557 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 14:16:20 +03:00
Maxim Dolgolyov 4b160a46e8 fix(geom8 ch2): аудит §9-§15 + финал — 5 косяков
§9 Босс 2: в условии было h=12 см, но правильный ответ S=10
требует h=8 см. Подправлены число в условии и подсказка.

§11 Теорема Пифагора:
- Card 11.1: 'квадраты на сторонах' были нарисованы как тонкие
  прямоугольники (140×20 и 20×100). Заменены на настоящие квадраты
  80×80 (a²) и 60×60 (b²). ViewBox увеличен до 200×255.
- Интерактив 1 (слайдер катетов): sqAh=min(40,ax*0.4) и sqBw=min(40,bx*0.4)
  давали прямоугольники, не квадраты. Теперь квадраты ax×ax и bx×bx
  с динамическим viewBox.

§12 Босс 3: в объекте задачи ans=144, но проверка использовала
correct[2]=62 — противоречие. Исправлено ans=62 + чистая подсказка.

Final2 Босс 1: маркер прямого угла в основании высоты H был
ориентирован неправильно (вертикально вниз). Пересчитан через
единичные векторы вдоль BC и перпендикуляра.

Всего проверено 21 SVG, исправлено 5. Остальные §10, §13, §14, §15 — OK.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:48:57 +03:00
Maxim Dolgolyov 1d39a1c7ea feat(geom8): Wave 5 — финал Главы 2 (шпаргалка, карта связей, 7 боссов)
Часть 1 — Итоговая шпаргалка: 15 mini-cards с SVG-иконкой и формулой
в KaTeX для каждого § (от S=a² до пифагоровых троек).

Часть 2 — Карта связей (интерактивная SVG 620×340):
кликабельные узлы 'Площадь' → 'Прямоуг. фигуры' / 'Параллелограммы' /
'Треугольники' → конкретные фигуры. Клик показывает формулу площади.

Часть 3 — 7 боссов (по 10 XP):
  Босс 1: прямоугольный 9-12 → c=15, h_c=7.2, S=54
  Босс 2: параллелограмм 14×8 с углом 30° → h=4, S=56
  Босс 3: трапеция 18/12/5 → m=15, S=75
  Босс 4: ромб d₁=16 d₂=12 → S=96, a=10, P=40
  Босс 5: медиана и центроид (S=36) → S/6=6, S/2=18
  Босс 6: равносторонний a=10 → h, S, расстояние от центроида
  Босс 7: пифагорова тройка 5-12-13 (P=30, c=13) → катеты, S=30

Часть 4 — Финальная плашка: confetti + achievement
'Мастер площадей Главы 2' + 50 XP бонус + кнопка перехода к Главе 3.

File: 6519 → 7133 LOC. ГЛАВА 2 ПОЛНОСТЬЮ ЗАВЕРШЕНА.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:40:25 +03:00
Maxim Dolgolyov e424bc231c feat(geom8): Wave 4 Главы 2 — §12-§15 (равносторонний, диагональ квадрата, обратная Пифагора, тройки)
§12 Равносторонний треугольник: слайдер a=1..20, live h=a√3/2 и S=a²√3/4,
4-шаговый вывод формулы высоты через Пифагор, калькулятор, тренажёр,
DnD-сортер, босс.

§13 Диагональ квадрата: слайдер a=1..20, live d=a√2, S=a², P=4a,
3-шаговый вывод d=a√2 через Пифагор, калькулятор (a→d/S/P; d→a; S→a/d),
тренажёр, босс.

§14 Обратная теорема Пифагора: 3 слайдера сторон a/b/c, live определение
типа (прямоугольный/остроугольный/тупоугольный) через сравнение c² и a²+b²,
квиз 8 наборов, DnD-сортер, тренажёр, босс.

§15 Пифагоровы тройки: генератор Евклида (m,n → (m²-n², 2mn, m²+n²)),
кликабельная таблица 10 примитивных троек с мини-SVG, тренажёр на поиск
недостающего элемента, квиз 'тройка или нет', DnD примитивные/кратные, босс.

File: 5118 → 6519 LOC. Все 15 §§ Главы 2 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:25:09 +03:00
Maxim Dolgolyov aa4c219d5a feat(geom8): Wave 3 Главы 2 — §9-§11 (общая высота, медианы, Пифагор)
§9 Треугольники с общей высотой: SVG draggable с общей стороной AB и
двумя вершинами C/D на параллельной прямой, live S₁/S₂=a₁/a₂,
анимация-доказательство, калькулятор, тренажёр, босс.

§10 Медиана и площади: SVG draggable треугольник с медианой AM делит
на 2 равновеликих, отдельная визуализация всех 3 медиан → 6 равновеликих
треугольников с центроидом G, доказательство, калькулятор, тренажёр, босс.

§11 Теорема Пифагора (ключевая): слайдеры катетов с квадратами a², b², c²
на сторонах, анимация доказательства через квадрат (a+b)², калькулятор
(a,b→c; c,a→b; диагональ прямоугольника), DnD-сортировщик пифагоровых
троек (3-4-5, 5-12-13, 6-8-10, 7-24-25, 9-12-15), тренажёр, босс (5 задач).

File: 3998 → 5118 LOC. 11 of 15 §§ Главы 2 готовы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 13:03:49 +03:00
Maxim Dolgolyov e2fc78d1f1 fix(geom8 ch2): §5 высота/доказательство + §8 прямые углы
§5 Draggable трапеция:
- Высота теперь рисуется как вертикальная пунктирная линия В СЕРЕДИНЕ
  трапеции от верхнего основания до нижнего (с прямым углом у основания),
  а не уходит вертикально вверх от вершины A вне фигуры
- Жёлтый drag-handle для h перенесён в вершину D (верх-лево) — тащишь
  её вертикально и высота меняется. Синий drag-handle для b остался в C.
- Добавлены подписи всех вершин ABCD точками и Unbounded-буквами
- Подсказки в углу SVG что какой цвет означает

§5 Пошаговое доказательство:
- Полностью переписана геометрия с КОРРЕКТНЫМ поворотом на 180°
  вокруг середины M боковой стороны BC (формула P'=2M-P)
- Раньше копия трапеции уходила за пределы viewBox (y=-20)
- Теперь 4 шага: трапеция → поворот вокруг M → параллелограмм ABD'A' →
  половина = трапеция, формула S=½(a+b)h

§8 Прямые углы:
- Card 8.1: треугольник A(20,150) B(220,150) C(92,54) — НАСТОЯЩИЙ
  прямоугольный 3-4-5 с h_c=ab/c (раньше координаты не давали 90° в C)
- Card 8.2: оба треугольника теперь корректные прямоугольные с прямыми
  углами на правильных вершинах
- Card 8.3: треугольник 6-8-10, маркер прямого угла в H пересчитан
  через единичные векторы H→C и H→A (раньше показывал не то направление)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:13:52 +03:00
Maxim Dolgolyov 8dee3e9829 fix(geom8): SVG audit — Ch1 §10 квадрат и Ch2 §2 прямоугольник
Системный аудит 62 статических SVG в теоретических карточках выявил
2 мелких косяка:

Ch1 §10 (квадрат, карточка 10.2): не хватало прямоугольных меток в
двух верхних углах — у квадрата были обозначены только нижние.
Добавлены маркеры в (68,24) и (168,24).

Ch2 §2 (прямоугольник, карточка 2.2 — периметр): на верхней стороне
у стрелки была ссылка marker-end='url(#a2)', но сам marker #a2 в SVG
не определён → битая ссылка. Убрана для консистентности с остальными
тремя сторонами.

KaTeX-форматирование: проверено во всех 24 buildP-функциях обеих глав —
везде используются корректные $...$ / $$...$$ / \[...\] делиметры.
Конвертаций не потребовалось.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:06:50 +03:00
Maxim Dolgolyov faf0fc5b41 fix(geom8 ch2): §5 трапеция — высота между основаниями + правильные диагональ/треугольники
Было:
- 5.1: высота нарисована из вершины (некорректно как иллюстрация
  'расстояние между параллельными сторонами')
- 5.2: координаты треугольников ABD/BCD и диагонали указывали на точки
  ВНЕ трапеции (диагональ заканчивалась в (215,30) вместо вершины D=(65,30))
- 5.3: то же — высота из вершины

Стало:
- Высота — вертикальная пунктирная линия в середине трапеции от верхнего
  основания до нижнего, с прямым углом
- Все вершины ABCD подписаны и отмечены точками
- В 5.2 диагональ BD корректно проведена, треугольники ABD/BCD точно
  совпадают с половинами трапеции, добавлены подписи S₁=½ah, S₂=½bh

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 10:00:21 +03:00
Maxim Dolgolyov 6d7eafceb5 feat(textbook): complete visual enhancement of geometry_8_ch2 §1-§8
- Added inline SVG diagrams to §7 boss tasks (right triangle shapes)
- Added SVG visualizations to §8 theory cards 8.1, 8.2, 8.3 (h_c to hypotenuse)
- Added SVG diagrams to §8 trainer tasks 1, 2, 3, 5 (triangle with altitude)
- Added SVG diagrams to §8 boss tasks 1, 3, 4
- Added mini-interactive СЛАЙДЕР widgets to §2-§8 (one per section):
  §2: rectangle a×b slider, §3: parallelogram a×h slider
  §4: triangle a×h/2 slider, §5: trapezoid (a+b)/2×h slider
  §6: rhombus d₁×d₂/2 slider, §7: right triangle ab/2 slider
  §8: h_c=ab/c slider showing altitude to hypotenuse
- Each slider is IIFE-encapsulated ~40 LOC, live SVG updates on input
- §1 already had slider (ИНТЕРАКТИВ 1 grid); §2-§8 get new СЛАЙДЕР widget
- Fixed duplicate x= attribute in §8.2 SVG proof diagram
2026-05-28 09:56:34 +03:00
Maxim Dolgolyov 427874ee54 feat(textbook): add inline SVG visualizations to all 48 theory cards in geometry_8_ch1
Added labeled SVG diagrams (280x148–170px) to every makeCard() call across
all 16 paragraphs (§1–§16). Each section gets 3 theory cards × 1 SVG each,
showing pentagons, hexagons, triangulations, parallelograms, rectangles,
rhombuses, trapezoids, Thales construction, medians/centroid and more.
Total: +1069 LOC, 48 SVGs inserted.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:51:40 +03:00
Maxim Dolgolyov cb1559439c feat(geom8): Wave 2 Главы 2 — §5-§8 (трапеция, ромб, прямоуг.тр-к, высота к гипотенузе)
§5 Трапеция: draggable SVG (b, h), 4-шаговое доказательство через 2 трапеции
→ параллелограмм, калькулятор 3 режима, DnD, тренажёр, босс.
§6 Ромб: draggable концов диагоналей (AC⊥BD), доказательство 4 тр-ка
→ прямоугольник d₁×d₂/2, тройной калькулятор (диагонали/a·h/a²sinα), DnD,
тренажёр, босс.
§7 Прямоугольный треугольник: draggable катетов, доказательство дублированием
→ прямоугольник, калькулятор (a,b→S,c; S,a→b; c,h_c→S), тренажёр, босс.
§8 Высота к гипотенузе: 3 подобных треугольника подсвечены цветом,
доказательство h_c=ab/c через равенство площадей, калькулятор полный
(a,b→c,h_c,a_c,b_c), DnD, тренажёр, босс.

File: 1675 → 3167 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 09:30:47 +03:00
Maxim Dolgolyov d20f0f933e feat(geom8): Wave 1 Главы 2 — §1-§4 (квадрат, прямоугольник, параллелограмм, треугольник)
§1 Площадь квадрата: SVG-сетка со слайдером a=1..10, калькулятор двусторонний
(a→S, S→√S), конвертер единиц (мм²/см²/дм²/м²/км²), тренажёр, босс.
§2 Прямоугольник: draggable угол (a,b,S=a·b в реалтайме), калькулятор прямой
и обратный, DnD-сортер по S=24, тренажёр, босс.
§3 Параллелограмм: draggable верхнее основание — S=a·h не меняется
(равноплощадные!), 4-шаговая анимация 'разрезаем и переставляем
в прямоугольник', калькулятор, тренажёр, босс.
§4 Треугольник: draggable C по горизонтальной прямой — S=½·a·h постоянна,
анимация 'достраиваем поворотом на 180° в параллелограмм', калькулятор тройной
(a,h→S; S,a→h; S,h→a), тренажёр, босс.

File: 503 → 1675 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 09:08:28 +03:00
Maxim Dolgolyov e22405516b fix(geom8): §3 внешние углы — корректная геометрия визуализации
Было: продолжение рисовалось от next-vertex назад через v, дуга центрировалась
у next-vertex с углом из произвольного направления — углы отображались
неправильно (не у тех вершин, не в тех направлениях).

Стало: для каждой вершины v вычисляются prev/next, направления u=(v-prev)/|·|
(входящая сторона), w=(next-v)/|·| (исходящая). Продолжение u рисуется от v
дальше. Дуга — сектор у v от u-направления до w-направления, sweep
определяется через знак векторного произведения (u×w). Подпись угла —
по биссектрисе дуги на радиусе Rlabel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 08:56:35 +03:00
Maxim Dolgolyov 640ca245ee fix(geom8): drag-интерактивы — pointermove/up на window + §7 индикатор равенства диагоналей
Drag (12 SVG-интерактивов): pointermove/pointerup/pointercancel слушались на
самом vertex-элементе. При выходе курсора за пределы маленького круга drag
обрывался — отсюда эффект 'нажал, чуть-чуть потянулось, и всё'. Перенесены
на window — теперь работают как нативный drag.

§7 (Прямоугольник): info-карточка показывала 'AC = BD' с одним значением.
Теперь две отдельные карточки AC и BD + индикатор равенства (зелёная плашка
'Диагонали равны' / красная 'Не равны' с Δ).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 08:53:57 +03:00
Maxim Dolgolyov 2e37360dac fix(geom8): §4 — определение cy в drawProof доказательства
В функции drawProof пошагового доказательства §4 использовалась переменная
cy без определения (была только cx). Это приводило к ReferenceError при
вызове buildP4, и из-за throw в ensureBuilt секция §4 не открывалась
при клике на карточку в селекторе параграфов.

Проверено: все 17 параграфов главы (p1-p16, final1) теперь строятся без ошибок.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 08:49:16 +03:00
Maxim Dolgolyov 22bd60cf0f feat(geom8): Wave 4 Главы 1 — финал главы (шпаргалка, карта связей, 7 боссов)
Часть 1: 9 mini-cards с формулами всех 16 параграфов (KaTeX).
Часть 2: интерактивная SVG-карта иерархии четырёхугольников
(клик по узлу — подсветка свойств).
Часть 3: 7 интегрированных боссов (по 10 XP):
  - Босс 1: многоугольник из суммы углов 1620°
  - Босс 2: параллелограмм через треугольник ABD
  - Босс 3: средние линии прямоугольника → ромб
  - Босс 4: ромб 60° → диагонали (Пифагор)
  - Босс 5: теорема Фалеса, 3 подзадачи
  - Босс 6: треугольник 12-16-20 — средняя линия + медиана + центроид
  - Босс 7: равнобедренная трапеция 20/8/10
Часть 4: при победе над всеми — achievement 'Мастер многоугольников Главы 1',
+50 XP бонус, confetti, кнопка перехода к Главе 2.

File: 5194 → 5558 LOC. Глава 1 полностью наполнена.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 08:38:19 +03:00
Maxim Dolgolyov ecda85e8ef feat(geom8): Wave 3 Главы 1 — §11-§16 (Фалес, медианы, средние линии, трапеция)
§11 Теорема Фалеса: SVG-угол с параллелями, конструктор деления отрезка
на n частей, тренажёр, DnD, босс.
§12 Медианы: SVG-треугольник drag + центроид G, доказательство 2:1
через среднюю линию, калькулятор, тренажёр, босс.
§13 Средняя линия треугольника: SVG со срединным треугольником,
доказательство, mini-quiz, DnD, тренажёр, босс.
§14 Трапеция: SVG drag (сохраняет параллельность оснований), конструктор
типов, доказательство m=(a+b)/2, калькулятор, тренажёр, босс.
§15 Равнобедренная трапеция: SVG с симметрией, 2 доказательства
(углы, диагонали), DnD свойств, тренажёр, босс.
§16 Признаки равнобедренной: 2 SVG-индикатора, доказательство признака,
mini-quiz, тренажёр, босс.

GLOSSARY: +центроид, +основания трапеции.
File: 3373 → 5194 LOC.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:18:47 +03:00
Maxim Dolgolyov 76eff24732 feat(geom8): Wave 2 Главы 1 — §5-§10 (параллелограмм, прямоугольник, ромб, квадрат)
§5 Свойства параллелограмма: SVG drag B/D, 2 пошаговых доказательства,
DnD-сортер, тренажёр, босс.
§6 Признаки: 3 SVG-демо, квиз выбора, DnD, доказательство признака 1, босс.
§7 Прямоугольник: SVG, доказательство AC=BD, калькулятор d=√(a²+b²),
тренажёр, DnD, босс.
§8 Признак прямоугольника: SVG с двойным индикатором, доказательство,
mini-quiz, тренажёр, босс.
§9 Ромб: SVG drag, доказательство AC⊥BD, калькулятор S=d₁d₂/2, DnD, босс.
§10 Квадрат: SVG со слайдером, иерархия фигур, калькулятор, DnD, тренажёр, босс.

File: 1910 → 3373 LOC.

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