Часть 1 — random и gaussRandom

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

ey8jtHFwLqg

Немного теории

Коротко о случайных числах. Нет никаких случайных чисел (по крайней мере на ПК). Все числовые последовательности псевдослучайны. Что это значит — поймете позже. Если вы проходили любой базовый курс программирования, то уже знаете об этом. А если еще по какой-то причине не проходили — бегом на code.org.

Все, наверняка, знают функцию random().

Разберем ее синтаксис.

  • Вы можете ничего не скормить ей, random() и получить случайное число от 0 до 1.
  • Можете скормить число (или массив) и получить случайное число (или массив) от 0 до этого числа.
  • random(4), например, вернет случайное число от 0 до 4.
  • Можно задать диапазон, random(-10,42), выдаст случайное число в диапазоне от -10 до 42.

Все более-менее ясно. Проблема в том, что random() берет числа напрямую из процессора, который генерирует псевдослучайные равномерно распределенные последовательности.
Что это значит? Это значит, что вероятность получения каждого отдельного числа в такой последовательности одинакова.
Например мы решили распределить 1 миллион шариков по линии длиной от 0 до 1. В каждой точке этой линии окажется одинаковое количество шариков.

Но мы же моушен-дизайнеры, мы должны моделировать клевые штуки из реального мира, а в реальном мире себя ничто так не ведет, и вы могли заметить, что тот же wiggle порой совсем «не такой», а ваша камера, расшатанная через random() выдает себя нереальностью.

Нормальное распределение

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

Нормальное распределение таково, что больше случайных величин будет ближе к «центральной», называемой математическим ожиданием (я упрощаю, да простят меня математики).

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

Просто посмотрите на картинку и поймете, в чем разница random() и gaussRandom() — второй более «случайный».

Задавайте вопросы и экспериментируйте.