Часть 2 — seedRandom

Адресовано всем, кто думает: «Я до сих пор жду тот день, когда мне пригодится высшая математика».

AM2AjQaGo4c

Поняв разницу между random() и gaussRandom(), сделаем шаг назад, посмотрим, что происходит до начала генерации случайных чисел.

seedRandom()

Максим Кислица спрашивал, как они генерируются. Я не буду расписывать весь процесс, обрисую лишь идею. Обычно случайные числа получаются в результате деления одного числа на другое очень много раз, и берутся остатки от деления. (На самом деле все может быть не так в зависимости от программы и алгоритма, но расписывать все нужно на лекции по программированию, а не в группе по афтер эффектc).
Что же это за числа? Одно из них задает датчик случайных чисел, а второе, если не сказано обратное, задаем мы. Это число и есть seed. Если мы его не укажем, как вы видели уже, ничего страшного, числа будут генерироваться сами.

seedRandom — ключ к управлению последовательностями случайных чисел. Проверьте, напишите в слайдере:

И посмотрите на последовательность выдаваемых чисел, затем смените на seedRandom(3), посмотрите, и вернитесь снова к 2. Как видите, мы можем получить ровно ту же форму последовательности, и это отлично. Кстати, поиграйте параметром seed где это возможно — в wiggle transform, в эмиттере Particular — и вы будете получать разные формы например, распределения частиц. Все потому что числа будут генерироваться слегка по другому. Постоянно этим пользуюсь
Но есть маленькая проблема. Одно из чисел, используемых для начального деления, АЕ берет явно из номера слоя. Так что у нас не получится получить 2 одинаковых набора случайных чисел на разных слоях, каким бы seed’ом мы не пользовались. Даже без уточнения seedRandom, наборы случайных чисел всегда будут разными.

Важное дополнение

Если внимательнее посмотреть на синтаксис seedRandom, то можно заметить второй параметр. Он как бы «замораживает» случайную величину. Это очень удобно, если на слое нам надо иметь одно, не изменяющееся случайное число. Например для того, чтобы случайно его сдвинуть.

После этой конструкции любой вызванный random() или gaussRandom() всегда будет иметь одно и то же значение.

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

Немного истории. Инженерам прошлого было не так просто получать случайные числа. Поэтому существовала книга «1 миллион случайных чисел», откуда они и брались. Если вы супер-гик, можете заказать ее на амазоне например.

Также можете ознакомиться с короткой заметкой на тему seed’а