Принцип работы ShapeSwirl


Математическая модель закрученного движения

В основе ShapeSwirl лежит представление движения частицы в полярных координатах:

  • радиус r(t) изменяется во времени
  • угол θ(t) задаёт вращение вокруг центра
  • преобразование в декартовы координаты выполняется стандартно

x(t)=r(t)((t))

y(t)=r(t)((t))

Функция радиуса в ShapeSwirl обычно задаётся как затухающая или возрастающая кривая:

  • экспоненциальное затухание: уменьшение радиуса к концу анимации
  • линейное расширение: разлёт элементов от центра
  • комбинированные easing-функции

Угол вращения задаётся как сумма базового угла и временной составляющей:

(t)=_0 + t

где:

  • θ₀ — начальный угол
  • ω — угловая скорость

Параметрическая структура ShapeSwirl

ShapeSwirl в mo.js строится вокруг набора параметров, определяющих форму вихря и поведение частиц.

Геометрические параметры

  • radius — базовый радиус распространения
  • radiusX / radiusY — эллиптическая деформация вихря
  • degree — общий угол закрутки
  • spread — разброс начальных углов частиц

Эти параметры задают исходное распределение элементов в пространстве до начала временной интерполяции.


Временные параметры

  • duration — длительность анимации
  • delay — смещение старта отдельных элементов
  • speed — коэффициент угловой скорости
  • easing — функция изменения параметров во времени

Временная ось в ShapeSwirl является управляющим фактором, влияющим одновременно на радиус, угол и визуальные свойства объекта.


Параметры трансформации

  • scale — изменение размера во времени
  • rotation — вращение каждого элемента вокруг собственной оси
  • opacity — прозрачность вдоль траектории

Комбинация этих параметров создаёт эффект «растворяющегося вихря», где элементы теряют массу по мере удаления от центра.


Принцип формирования вихревого движения

ShapeSwirl использует двухуровневую систему преобразований:

  1. Глобальное движение группы

    • задаёт центр вихря
    • формирует общую траекторию расширения
  2. Локальное движение элемента

    • добавляет индивидуальную фазу вращения
    • формирует микровариации траекторий

Суперпозиция этих уровней создаёт эффект хаотически-организованного движения.


Интерполяция параметров

Ключевая особенность ShapeSwirl заключается в том, что параметры не фиксированы, а интерполируются.

Радиус часто описывается функцией:

r(t)=r_0(1 - t)^k

где:

  • r₀ — начальный радиус
  • k — коэффициент затухания
  • t — нормализованное время (0…1)

При k > 1 создаётся ускоренное схлопывание вихря, при k < 1 — плавное расширение.


Алгоритм построения кадра

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

  1. Вычисление нормализованного времени t
  2. Обновление угла вращения для каждого элемента
  3. Пересчёт радиальной компоненты
  4. Преобразование в декартову систему координат
  5. Применение визуальных трансформаций (scale, opacity, rotation)
  6. Рендер в canvas или SVG-слой

Особенность реализации mo.js заключается в том, что вычисления оптимизированы через предрасчёт кривых easing, минимизируя нагрузку на runtime.


Поведение при большом количестве элементов

ShapeSwirl масштабируется за счёт групповой обработки:

  • вычисление общих параметров выполняется один раз
  • индивидуальные параметры наследуют базовую кривую
  • смещения добавляются через фазовый сдвиг

Фазовый сдвиг часто задаётся как:

t_i = t + t_i

где Δtᵢ — индивидуальная задержка элемента.

Это позволяет избежать синхронного движения и создаёт эффект турбулентности.


Влияние easing-функций

Easing в ShapeSwirl определяет характер закрутки:

  • linear — равномерное вращение, механический вихрь
  • ease-out — резкое начало с затуханием движения
  • ease-in-out — симметричная форма вихря
  • cubic-bezier — сложные нелинейные траектории

Easing влияет одновременно на:

  • скорость вращения
  • изменение радиуса
  • интенсивность масштабирования

Комбинирование с Burst-системой mo.js

ShapeSwirl часто используется совместно с burst-эффектами:

  • Burst задаёт момент появления
  • ShapeSwirl формирует последующее закрученное движение

Такое сочетание создаёт каскадную модель:

  1. импульс (burst)
  2. разлёт
  3. закрутка (swirl)
  4. затухание

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

Для обеспечения высокой частоты кадров применяются следующие техники:

  • кеширование тригонометрических значений
  • использование requestAnimationFrame как единого тикера
  • минимизация DOM-операций при SVG-рендере
  • batch-обновление трансформаций

Особенно критично уменьшение количества вызовов sin и cos, так как ShapeSwirl интенсивно использует полярные преобразования.


Внутренние ограничения модели

При экстремальных значениях параметров возникают характерные эффекты:

  • слишком большой degree приводит к визуальному «замыканию» траектории
  • высокий speed создаёт алиасинг движения
  • дисбаланс radiusX/radiusY вызывает эллиптическую деградацию вихря

Стабильная работа достигается при согласовании угловой скорости и радиального затухания.


Композиция сложных сцен

ShapeSwirl выступает базовым строительным блоком для более сложных сцен:

  • многослойные вихри с разными центрами
  • пересекающиеся swirl-паттерны
  • синхронизированные группы с фазовым сдвигом

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