You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Потребитель или build-time compiler может задать максимальную ошибку spring-реконструкции в единицах анимируемого значения. Compositor гарантирует этот предел математически, независимо от амплитуды перехода, не вводя скрытых предположений про «типичные 100 px».
Подтверждённая проблема
Текущий DEFAULT_TOLERANCE = 1/400 выражен в нормализованном progress [0..1]. Для аффинного numeric mapping:
value(t) = from + progress(t) · (to - from)
ошибка результата:
|Δvalue| <= |to - from| · toleranceProgress
Следовательно, один default означает:
span = 100 -> max error 0.25 value units
span = 1000 -> max error 2.5 value units
Комментарий в compositor уже признаёт зависимость и предлагает вручную уменьшать tolerance для крупных амплитуд. Но compileSpringPlan() уже знает from/to, а build-time compiler знает статические tracks; пользователь не должен вручную переводить абсолютный budget в progress там, где это можно вывести точно.
Закон преобразования
Для span = |to-from| > 0:
toleranceProgress <= maxValueError / span
Если одновременно заданы normalized и absolute budgets:
Пользовательский результат
Потребитель или build-time compiler может задать максимальную ошибку spring-реконструкции в единицах анимируемого значения. Compositor гарантирует этот предел математически, независимо от амплитуды перехода, не вводя скрытых предположений про «типичные 100 px».
Подтверждённая проблема
Текущий
DEFAULT_TOLERANCE = 1/400выражен в нормализованном progress[0..1]. Для аффинного numeric mapping:ошибка результата:
Следовательно, один default означает:
Комментарий в compositor уже признаёт зависимость и предлагает вручную уменьшать tolerance для крупных амплитуд. Но
compileSpringPlan()уже знаетfrom/to, а build-time compiler знает статические tracks; пользователь не должен вручную переводить абсолютный budget в progress там, где это можно вывести точно.Закон преобразования
Для
span = |to-from| > 0:Если одновременно заданы normalized и absolute budgets:
Для вырожденного span движение отсутствует; деление не выполняется.
Это не perceptual heuristic. Число
maxValueErrorзадаётся caller/compiler в единицах конкретного numeric channel.API / архитектура
Низкоуровневый compositor
Сохранить
toleranceкак normalized expert API и добавить явно названный absolute contract, например:Точное имя выбирается по conventions репозитория, но семантика обязательна:
maxValueError > 0;from/toдоformat;Multi-channel / animate/compiler
Для группы каналов с общей нормализованной spring-кривой:
Так один native effect соблюдает самый строгий channel contract.
Precision manifest
Если параметр входит в compiler/portable MotionProgram:
RED / доказательства
1/100/1000; текущая normalized-only ошибка результата растёт линейно.maxValueErrorдля under/critical/over иv0domain.effective=min(normalized, absolute/span); zero/near-zero span без NaN/Infinity.Размер и производительность
nanobyte-identical<=1024 B gzip; nano API не расширяется;linear()может стать плотнее только когда caller запросил более строгую доказанную точность; cost отражается diagnostics/manifest.Не входит
Связано: #95, #106, #220, #221.