Skip to content

research(core): C² ballistic→critical landing как отдельная аналитическая motion family #233

Description

@lemone112

Пользовательский результат

Проверить отдельную аналитическую траекторию для быстрых no-overshoot UI-переходов: первая фаза быстро набирает скорость, затем в единственной вычисляемой точке переключается на критический хвост с непрерывными position, velocity и acceleration.

Это не замена spring и не автоматический default. Production API допускается только после математической, perceptual и size/perf приёмки.

Общая C² landing formula

Пусть в момент переключения состояние относительно цели:

y < 0   // ещё не достигли цели
v > 0
a       // текущее ускорение

Критический хвост с частотой Ω:

ytail(s) = [y + (v+Ωy)s] exp(-Ωs)

Условие совпадения ускорения даёт:

Ω = (v + sqrt(v²-a y)) / (-y)

при допустимом discriminant/domain.

Инварианты:

ytail(0)   = y
ytail'(0)  = v
ytail''(0) = a

Кроме того:

v+Ωy = -sqrt(v²-a y) <= 0

что даёт основание исследовать монотонное приближение к цели без overshoot.

Специальная точка максимальной скорости

Если первая фаза — underdamped spring из покоя и switch делается при a=0, то:

y = -(2ζ/ω₀)v
Ω = ω₀/ζ

Получается очень дешёвый двухфазный закон без root search.

Исследовательский прототип при одинаковом исходном ω₀ показал более короткий time-to-0.1% относительно critical spring для части ζ domain, особенно при малом ζ. Это не perceptual evidence и не product claim.

Фундаментальное ограничение

Jerk в switch обычно разрывается. Для switch в max-velocity point:

jafter / jbefore = 1/ζ²

При малом ζ скачок может быть крупным. Нетривиальный переход между двумя постоянными second-order системами, одновременно сохраняющий position/velocity/acceleration/jerk, в общем случае переопределён: C³ требует либо той же системы, либо time-varying coefficients/bridge.

Нельзя называть C² «идеально гладким» без этого уточнения.

Варианты исследования

A. Exact C² two-phase

Минимальная аналитическая family выше.

B. Bounded C³ bridge

Короткий quintic/septic bridge между фазами с constraints на endpoint state и доказанным deviation/jerk budget. Допустим только если не превращает механизм в тяжёлый trajectory optimizer.

C. Time-varying pole schedule

Только offline/compiler path; нужна stability/monotonicity proof. Не вводить per-frame adaptive controller без сильного evidence.

Perceptual protocol

До публичного API провести blind comparison на matched conditions:

  • critical spring;
  • underdamped spring без overshoot через high damping;
  • cubic/minimum-jerk finite tween;
  • ballistic-critical A/B variants.

Сравнивать при одинаковых:

  • duration до declared tolerance;
  • initial acceleration/peak velocity либо clearly reported mismatch;
  • amplitude;
  • display refresh/device class.

Метрики: preference, perceived responsiveness, abruptness at switch, task-specific appropriateness. Не выводить универсальный «красивее» из robotics/control literature.

RED / математические доказательства

  1. Symbolic C² endpoint identities.
  2. Domain proof v²-a y >=0, monotonic/no-overshoot conditions.
  3. Exact/ULP sampling vs piecewise reference.
  4. Switch at max velocity formula Ω=ω₀/ζ.
  5. Jerk ratio characterization и prohibited low-ζ domain при необходимости.
  6. Finite horizon/end sealing compatible с [spring] C¹-конечная springAsEasing без endpoint-прыжка и повторной валидации #219 philosophy.
  7. Arbitrary amplitude/time scaling invariance.
  8. Compiler/browser representation spike; zero steady-state JS if accepted.
  9. Mutation: discriminant sign, root branch, tail coefficient, switch timing.

GO

Новая family допустима только если:

  • имеет ясно ограниченный use case, где blind study показывает преимущество;
  • аналитически стабильна и no-overshoot в declared domain;
  • API использует измеримые параметры, не semantic feel;
  • runtime/compiler cost ниже или сопоставим с существующими primitives;
  • не усложняет nano и не подменяет spring default.

NO-GO

Отсутствие perceptual преимущества, заметный jerk artifact или тяжёлая C³-компенсация — успешный NO-GO. Сохранить research note/oracles, удалить experimental production code.

Не входит

  • автоматическое использование для всех tweens;
  • nonlinear physical claim;
  • замена C¹ interruption contract;
  • semantic names snappy/smooth/premium в core.

Родитель: #225. Связано: #219, #230, #95.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions