Числовые значения и единицы измерения

Числовые значения в анимациях задают основу любого вычисления движения: позицию, масштаб, прозрачность, поворот, временные интервалы и промежуточные состояния. В контексте Motion One работа с числами строится вокруг интерполяции значений и преобразования единиц измерения в непрерывные анимационные кривые, совместимые с Web Animations API.

В анимационных системах числовые значения рассматриваются не как статические параметры, а как точки на непрерывной шкале. Любое изменение значения разбивается на множество промежуточных шагов, каждый из которых вычисляется на основе времени прогресса анимации.

В Motion One числовые свойства могут задаваться в нескольких формах:

  • чистые числа без единиц (opacity: 0 → 1)
  • числовые значения с единицами CSS (transform: translateX(0px → 200px))
  • угловые значения (rotate: 0deg → 360deg)
  • относительные значения (+=, -=)

Ключевой принцип заключается в том, что движок анимации всегда приводит начальное и конечное значения к единому числовому представлению перед интерполяцией.

Интерполяция числовых значений

Интерполяция представляет собой вычисление промежуточных значений между стартовой и конечной точками по формуле:

  • v(t) = start + (end − start) × p

где p — прогресс анимации в диапазоне от 0 до 1.

В Motion One эта логика применяется не только к простым числам, но и к сложным типам значений, включая трансформации и цвета.

Интерполяция обеспечивает:

  • плавное изменение координат
  • равномерное масштабирование
  • синхронизацию нескольких свойств

При работе с дробными значениями важна точность вычислений, поскольку накопление ошибок может приводить к визуальным артефактам при длительных анимациях.

Единицы измерения CSS и их обработка

В анимационных библиотеках ключевую роль играют единицы измерения. В Motion One поддерживается автоматическое преобразование между основными CSS-единицами:

  • пиксели (px)
  • проценты (%)
  • угловые единицы (deg, rad, turn)
  • временные единицы (ms, s — для конфигурации времени)
  • относительные единицы (em, rem — в ограниченных случаях)

Перед началом интерполяции система выполняет нормализацию значений. Например:

  • 10px → 200px преобразуется в числовой диапазон 10 → 200
  • 0deg → 1turn преобразуется в 0 → 360

Такая унификация позволяет работать с разнородными значениями как с единым числовым пространством.

Особенности работы с пикселями

Пиксели являются наиболее стабильной единицей измерения, поскольку не зависят от контекста документа. В Motion One пиксельные значения используются как базовый формат при интерполяции геометрических трансформаций.

При анимации translateX:

  • начальное значение: 0px
  • конечное значение: 300px
  • промежуточные шаги вычисляются линейно или через easing-функции

Преобразование всегда происходит в числовую шкалу, где единицы измерения временно абстрагируются.

Проценты и контекстные значения

Процентные значения зависят от размеров родительского контейнера, что делает их динамическими. В Motion One такие значения требуют дополнительной стадии вычисления:

  1. определение базового размера
  2. перевод процента в абсолютное значение
  3. интерполяция числового результата

Например:

  • translateX: 0% → 100%
  • при ширине контейнера 500px диапазон становится 0 → 500px

Это означает, что итоговая анимация может изменяться при изменении layout без изменения самой анимационной логики.

Угловые значения и круговая интерполяция

Повороты являются отдельным типом числовых значений, поскольку имеют циклическую природу. В Motion One поддерживается работа с:

  • deg (градусы)
  • rad (радианы)
  • turn (обороты)

Особенность углов заключается в выборе кратчайшего пути интерполяции. Например:

  • 350deg → 10deg

Система может интерпретировать это как:

  • -10deg (кратчайшая дуга)

или

  • +20deg (длинный путь)

Выбор зависит от алгоритма нормализации углов, который минимизирует визуально избыточное вращение.

Относительные числовые значения

Относительные изменения позволяют анимировать свойства без явного указания абсолютных значений. В Motion One поддерживаются выражения вида:

  • +=50
  • -=20

Такие конструкции преобразуются в:

  • currentValue + delta

Это особенно полезно для:

  • повторяющихся анимаций
  • накопительных эффектов
  • интерактивных интерфейсов

Система сохраняет текущее состояние свойства и пересчитывает его перед каждой новой анимацией.

Временные числовые параметры

Временные значения определяют скорость анимации и её поведение. В Motion One основными параметрами являются:

  • duration
  • delay
  • endDelay

Все временные значения нормализуются к миллисекундам, независимо от исходной формы (например, секунды преобразуются в ms).

Формально:

  • 1s = 1000ms

Временная шкала является основой для вычисления прогресса p в интерполяции.

Нелинейное распределение значений через easing

Числовая интерполяция редко является линейной. В Motion One используется функция сглаживания, изменяющая распределение прогресса:

  • линейная
  • ускорение
  • замедление
  • пользовательские кривые

Фактическая формула принимает вид:

  • v(t) = start + (end − start) × easing(p)

Где easing(p) преобразует линейный прогресс в нелинейный.

Это позволяет создавать визуально естественные движения, несмотря на математически равномерную дискретизацию времени.

Смешанные числовые типы

Особую сложность представляют значения, содержащие одновременно число и единицу. В Motion One система разбивает такие значения на компоненты:

  • числовая часть
  • единица измерения

Пример:

  • 100px → { value: 100, unit: “px” }

При интерполяции изменяется только числовая часть, тогда как единица сохраняется неизменной.

Ошибки преобразования и нестабильные значения

При работе с числовыми значениями возможны проблемы:

  • смешение несовместимых единиц (px и % без контекста)
  • NaN при некорректном парсинге
  • потеря точности при множественных преобразованиях
  • резкие скачки при изменении layout

В Motion One такие ситуации обрабатываются через нормализацию и fallback-механизмы, которые приводят значения к безопасному диапазону перед запуском анимации.

Масштабирование числовых значений

Scale-операции используют безразмерные числа. В Motion One масштаб интерпретируется как множитель:

  • 1 = исходный размер
  • 0.5 = уменьшение вдвое
  • 2 = увеличение вдвое

Интерполяция scale всегда проходит через линейную числовую шкалу, поскольку отсутствуют единицы измерения, требующие нормализации.

Композиция числовых трансформаций

При одновременной анимации нескольких свойств происходит векторная интерполяция. В Motion One это включает:

  • translateX
  • translateY
  • scale
  • rotate

Каждое значение интерполируется независимо, после чего объединяется в итоговую матрицу трансформации. Это позволяет избегать конфликтов между свойствами и сохранять предсказуемость движения.

Поведение чисел при ускоренной анимации

При высокой частоте кадров числовые значения обновляются с учётом временного шага между кадрами. В Motion One прогресс вычисляется как функция реального времени, а не количества кадров:

  • p = elapsedTime / duration

Это обеспечивает стабильность анимации при различной нагрузке системы и изменяющемся FPS.

Числовая стабильность и визуальная непрерывность

Главная цель обработки числовых значений заключается в сохранении непрерывности визуального движения. В Motion One это достигается сочетанием:

  • нормализации единиц
  • точной интерполяции
  • корректной обработки времени
  • синхронизации нескольких параметров

Даже при сложных трансформациях система сохраняет линейную зависимость между временем и изменением состояния, обеспечивая предсказуемое поведение анимации без скачков и разрывов.