На хабре много статей по клеточным автоматам (http://ift.tt/12EU9Db, http://ift.tt/1oNXGW3), особенно по игре “Жизнь” (http://ift.tt/1WaAiVL, http://ift.tt/W8mbSC, http://ift.tt/1C2XOtw). Я хочу рассказать что-то новенькое — про другие клеточные автоматы, привести неожиданные и интересные, по моему мнению, примеры. Мы посмотрим на структуру, которая постепенно копирует свою исходную конфигурацию; и на структуру, которая рисует круг.
Осторожно, большие gif-ки
Это тоже относится к определениям, но это точно пригодится:
Заметим, что новое состояние структуры не зависит от «порядка применения» , как это может показаться с первого взгляда: на самом деле мы не изменяем состояние, мы делаем новое поле и его заполняем новыми состояниями.
Конфигурация – состояние структуры с конечным количеством ненулевых ячеек.
У нас есть некоторые направления
Очевидно, что операция линейна (в смысле XOR), то есть мы можем вычилить новые конфигурации для каждой ячейки по отдельности, а потом поэлементно проксорить результат, а не честно считать новую конфигурацию. Другими словами (здесь и далее под понимается XOR): если
, то
. Ну и соответсвенно
.
Обозначим — конфигурация с одной единичкой в ячейке
элементом.
Ну так рассмотрим их по отдельности. Несложно заметить, что следующая конфигурация будет иметь
Посмотрим, как конфигурация будет всести себя дальше (а она то будет вести себя классно!):
Выходит, что все члены при
Что же, база доказательства копирования готова, попробуем сделать переход. Все так же, только вместо двойки — .
Если применение раз имеет вид:
то
Что и хотелось получить.
Теперь имеем
Классно, круто, наша структура действительно копируется вдоль векторов, задающих окрестность.
Покопируем солнышко:
На примере квадрата, как это распространяется дальше:
Замечательный пример невероятного: дискретной структурой, с конечной памятью каждой ячейки (а значит она не может помнить даже свои координаты!) будем сколь угодно хорошо будем интерполировать непрерывный объект — окружность.
Я не буду формально описывать эту систему, так как от ее формального описания яснее не станет: там у ячейки дюжина состояний и столько же элементов в окресности.
Начнем. Почти очевидно, что такое бегающий сигнал
И ясно, что он может «расталкивать» удерживающие его ячейки.
Это почти всё, что нам нужно: запустим горизонтальный сигнал, который будет расталкивать несущие ячейки, а при каждом расталкивании будем создавать два вертикальных фиксатора и вертикальный сигнал. Ясно, что сигналы можно устроить так, чтобы горизонтальный не кофликтовал с вертикальными: если они уж наложились, нужно делать новое состояние, которое будет «помнить» в какие стороны нужно запустить сигналы на следующем шаге.
Почему же фиксирующие точки будут стремиться к окружности?
Обозначим:
,
— расстояние «до начала» от точек, фиксирующих горизонтальный сигнал;
,
— рассточние от горизонтальной оси до точек, фиксирующих вертикальный сигнал в столбце с индексом
;
Тогда время запуска вертикального сигнала:
(для каждого
из суммы нам нужно от центра отойти на
вправо, вернуться, влево, вернуться), что асимптотически
. Аналогично, время от запуска вертикального сигнала до достижения им высоты
:
. Определим
радиус окружности, как
, то есть имеем
. Как мы уже поняли, время образования точки на
столбце на расстоянии
:
. Эта точка лежит на окружности радиуса
(теорема Пифагора), то есть
, но
, то есть мы получили, что
. А это значит, что все такие (вертикальные фиксирующие) точки будут находится примерно на том же расстоянии от центра, что и горизонтальные фиксирующие. Следовательно, они буду образовывать фигуру, близкую к окружности.
Красивая картинка, проясняющая ситуацию.
Спасибо Арсену за прототип солнышка!
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий