chore(sim-builder): план фичи (8 фаз) — конструктор симуляций

This commit is contained in:
Maxim Dolgolyov
2026-06-13 10:54:45 +03:00
parent c4ca8bcae7
commit d1d52d806d
10 changed files with 469 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
# Phase 2: Физический интегратор
**Status:** ⬜ Not Started
**Parent plan:** [PLAN.md](./PLAN.md)
**Domain:** frontend
## Objective
Добавить настоящую физику: тела с массой, гравитация/пружины/столкновения/трение,
перетаскивание тел силой, траектории. Динамика считается движком, а не формулой.
После фазы маятник/столкновения/брошенное тело идут динамически из спеки.
## Tasks
- [ ] Блок `physics` в спеке: `{ enabled, gravity:{x,y}, friction, walls:[...], restitution }`.
- [ ] Тело-объект: `body:{ mass, vx, vy, fixed }` — интегрируется (опора на `_fx_motion.js`, посмотреть API; не дублировать интегратор).
- [ ] Пружины: `springs:[{ a, b, k, length }]` (между телами или телом и точкой-якорем).
- [ ] Столкновения: упругие шары/стены (restitution), базовый бродфейз достаточно (N небольшое).
- [ ] Drag тела: перетаскивание задаёт позицию/скорость (отпустил — летит). Кинематические (формульные) объекты Ф0 сосуществуют с физическими.
- [ ] Траектория: накопление следа центра тела (toggle в спеке).
- [ ] Демо-спеки: «маятник» (груз+нить как пружина/констрейнт), «упругие шары».
## Files to Modify/Create
- `frontend/js/labs/_sim_engine.js` — физический режим, интеграция с _fx_motion (modify)
- `frontend/js/labs/_sim_physics.js` — обёртка интегратора/коллизий, если чище отдельно (new, опц.)
- `frontend/js/labs/_sim_demo.js` — физ-демо (modify)
## Acceptance Criteria
- Тело под гравитацией падает/летит по параболе через интегратор (не по формуле).
- Пружина колеблет груз; шары упруго сталкиваются; стены отражают.
- Drag тела работает; формульные объекты Ф0 продолжают работать в той же сцене.
## Notes
- Шаг интегратора фиксированный (накопитель dt) для стабильности.
- Не переусложнять коллизии — школьный уровень (круги/стены).
## Review Checklist
- [ ] Все задачи выполнены
- [ ] Использует _fx_motion, без своего дубля интегратора без причины
- [ ] Стабильность (нет взрыва энергии на разумных параметрах)
- [ ] Нет регрессий Ф0/Ф1
## Handoff to Next Phase
<!-- Заполняет реализатор -->