Как устроена анимация
=====================

Диапазон Grow–Trim
------------------

``GROW`` задаёт конец видимого интервала, а ``TRIM`` — его начало.
При обычной работе видимая часть находится между этими двумя значениями.

Примеры:

.. list-table::
   :header-rows: 1

   * - Grow
     - Trim
     - Результат
   * - 100%
     - 0%
     - Полный диапазон.
   * - 50%
     - 0%
     - Первая половина роста.
   * - 80%
     - 30%
     - Видима средняя часть диапазона.
   * - 100%
     - 100%
     - Пустой диапазон.

``INVERT_TRIM`` оставляет область снаружи выбранного интервала. Поэтому
результат может состоять из двух раздельных цепочек.

Глобальное и локальное время
----------------------------

Сначала глобальные значения Grow и Trim переводятся во время каждой
группы сегментов. Затем внутри каждого сегмента выполняется геометрическая
обрезка.

``SPEED_MOD`` управляет этим переводом:

TIME
   Каждая группа получает одинаковую долю времени независимо от длины.

LENGTH
   Время пропорционально суммарной длине сегментов группы.

MIX
   Интерполяция между TIME и LENGTH. Доля задаётся ``SPEED_MIX``.

``OVERLAP`` позволяет следующей группе начаться до завершения предыдущей.

Anchor и Symmetry
-----------------

При ``SYMMETRY = ON`` Anchor находится внутри каждого сегмента, а рост
может идти в обе стороны.

При ``SYMMETRY = OFF`` используется однонаправленная обрезка. Для
закрытых режимов алгоритм переходит к ``CLOSE``, для открытых —
к ``OPEN``.

