Files
Learn_System/plans/sim-builder/phase-2-physics.md
T

3.1 KiB
Raw Blame History

Phase 2: Физический интегратор

Status: Not Started Parent plan: 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