Недавно мне понравились наброски Зака Либермана, и я начал думать об аналогичных клеточных анимациях, где клетки динамически взаимодействуют с другими соседними клетками. Я пробовал различные конкурентные и совместные динамики для этих взаимодействий. Результаты, оглядываясь назад, напоминают эволюционные симуляции хищника/жертвы (вроде этих) — я нахожу визуализацию растущего городского пейзажа довольно убедительной (хотя и далеко не такой эстетически интересной, как наброски Зака).
Правила/ограничения для всех экспериментов:
- Все ячейки инициализируются с небольшими случайными высотами и небольшими случайными скоростями роста (положительными и отрицательными).
- Симуляция завершается, если все ячейки не имеют высоты или какая-либо ячейка достигает 100 (а иногда и никогда)
- Динамика каждой ячейки полностью описывается одной функцией, которая передает состояние ячейки и всех ее соседей и возвращает одно изменение скорости ее роста (может быть вверх, вниз или ноль).
- Клетки окрашены в красноватый цвет, когда скорость роста снижается (становится более отрицательной), и в зеленый, когда положительная. Серый иначе.
- Размеры окрестностей могут варьироваться (здесь они находятся в диапазоне от 1 до 5)
Каждый помечен описанием используемого правила и интерпретацией результата. Из-за случайной инициализации некоторые из них выглядят совершенно по-разному при каждом запуске.
Тривиальные испытания
Чуть интереснее
Выводы:
- В некоторых случаях оказалось на удивление трудно превратить концепцию (мое предположение о том, как будет работать динамика) в ожидаемый результат. Плохая интуиция для динамических систем?
- Многие сложные правила быстро рушатся, приводя к тривиальным результатам — достижение баланса (для создания стабильности) иногда бывает сложной задачей.
- Мерцание — результат того, что логика застревает на линии между двумя состояниями — поможет буфер или какая-то реализация импульса.