Идеальный loop

Продолжаем серию «лупы для извращенцев». Решаем обратную задачу — укладываем в композицию N полных колебаний синусоиды.
Таким образом луп идеально поместится в композицию любой длины необходимое число раз.

inverseLoop

Для начала немного школьной математики

Обобщенная форма синусоиды выглядит так:
y = А*sin(wt+phi), где А-амплитуда, w — частота, phi — сдвиг по фазе.

Период колебания T = 2*PI/w

dvuM_oK_2o4

Длина композиции L, надо уместить в нее T целое число раз.
Значит L*w/(2*PI) = b — целое число. Воспользуемся функцией Math.floor() для приведения к целому числу.

Все что нам надо для управления синусоидой сейчас это w, частота колебаний, и находится она так:
w = 2*b*PI/L

Создаю шэйп кидаю на него слайдеры — period, phaseShift и amp для контроля и пишу в yPosition (вы спокойно сможете применить к чему угодно). phaseShift лучше сделать Angle Control’ом, так как сдвигаем мы на угол.

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