Блог Стебунова Владимира

Диффузия и процедурная генерация

Внимание, эта страница содержит тяжелые javascript скрипты!

Иногда симулирование химических процессов даёт интересные плоды. Например, вот такие.

По своей сути симуляция происходит так же, как мы делали поиск границ для детектора Канни. Мы выставляем каждому пикселю два параметра А и В. Эти параметры на каждом шаге мы сворачиваем из матрицы 3 на 3 с заданными весами и это значение перемножаем на нужные коэффициенты и прибавляем к предыдущему значению. Так как параметра два, необходимо решить, какой цвет мы будем выводить, в моем примере я вывожу только параметр А.

В отличие от других алгоритмов, этот алгоритм зависит от входных параметров, меняя их, мы можем получить на одних и тех же данных разные картинки.

Процедурная генерация - интересная тема в программировании. Веселая ее часть: задаем правила, и компьютер их обрабатывает. Получаем не всегда предугадываемый результат. Не надо переносить спецификацию с головы заказчика в компьютер, лучше наслаждаться творчеством от начала до конца. Больше всего используется в компьютерных играх. Самый яркий пример - это карты в первом дьябло. Каждый раз лабиринт строится заново. Второй интересный пример - ELITE, где вселенная строится в зависимости от начального случайного числа.

Сегодня нарисуем ёлочку, пользуясь только набором правил. Идею елочки я взял с этого блога. Мы просто задаем нашeму указателю двигаться вперед, пока это возможно и он ни во что не врезается. В случайные промежутки времени он пытается размножиться в разные стороны и начать расти в них.

Для вывода этого всего я использую библиотеку Processing.js. Она позволяет компилировать на лету, то что написано в Processing. К сожалению, она не очень оптимизирована и даже не поддерживает некоторые команды Processing, и не все библиотеки самого Processing туда портированы. Но для нашего случая сойдет.

С наступающим Новым годом!

Ссылки:

Следующая статья

Предыдущая статья