На хабре много статей по клеточным автоматам (http://ift.tt/12EU9Db, http://ift.tt/1oNXGW3), особенно по игре “Жизнь” (http://ift.tt/1WaAiVL, http://ift.tt/W8mbSC, http://ift.tt/1C2XOtw). Я хочу рассказать что-то новенькое — про другие клеточные автоматы, привести неожиданные и интересные, по моему мнению, примеры. Мы посмотрим на структуру, которая постепенно копирует свою исходную конфигурацию; и на структуру, которая рисует круг.
Осторожно, большие gif-ки
Это тоже относится к определениям, но это точно пригодится:
– состояние структуры.
– ячейка, то – ее состояние. Нечто вроде: «по координатам ячейки — ее состояние».
– новое состояние ячейки
– новое состояние структуры, где каждая ячека имеет свое новое состояние. (Применили ко всем ячейкам)
Заметим, что новое состояние структуры не зависит от «порядка применения» , как это может показаться с первого взгляда: на самом деле мы не изменяем состояние, мы делаем новое поле и его заполняем новыми состояниями.
Конфигурация – состояние структуры с конечным количеством ненулевых ячеек.
У нас есть некоторые направления — окресность. Захотим же, чтобы — XOR'ила все значения из окресности (в том числе и значение ячейки, результат которой вычисляем). Почему мы взяли именно так? Просто нам ясно, что если у нас на поле только одна единичная клеточка, то за один ход она «откопируется» во всю окрестность (инвертированную).
Очевидно, что операция линейна (в смысле XOR), то есть мы можем вычилить новые конфигурации для каждой ячейки по отдельности, а потом поэлементно проксорить результат, а не честно считать новую конфигурацию. Другими словами (здесь и далее под понимается XOR): если , то . Ну и соответсвенно .
Обозначим — конфигурация с одной единичкой в ячейке элементом.
Ну так рассмотрим их по отдельности. Несложно заметить, что следующая конфигурация будет иметь в ячейках (в том числе, 1 останется на месте), то есть:
Посмотрим, как конфигурация будет всести себя дальше (а она то будет вести себя классно!):
Выходит, что все члены при сокращаются, ибо входят четное число раз в сумму (а мы используем поле характеристики два).
Что же, база доказательства копирования готова, попробуем сделать переход. Все так же, только вместо двойки — .
Если применение раз имеет вид:
то
Что и хотелось получить.
Теперь имеем
Классно, круто, наша структура действительно копируется вдоль векторов, задающих окрестность.
Покопируем солнышко:
На примере квадрата, как это распространяется дальше:
Замечательный пример невероятного: дискретной структурой, с конечной памятью каждой ячейки (а значит она не может помнить даже свои координаты!) будем сколь угодно хорошо будем интерполировать непрерывный объект — окружность.
Я не буду формально описывать эту систему, так как от ее формального описания яснее не станет: там у ячейки дюжина состояний и столько же элементов в окресности.
Начнем. Почти очевидно, что такое бегающий сигнал
И ясно, что он может «расталкивать» удерживающие его ячейки.
Это почти всё, что нам нужно: запустим горизонтальный сигнал, который будет расталкивать несущие ячейки, а при каждом расталкивании будем создавать два вертикальных фиксатора и вертикальный сигнал. Ясно, что сигналы можно устроить так, чтобы горизонтальный не кофликтовал с вертикальными: если они уж наложились, нужно делать новое состояние, которое будет «помнить» в какие стороны нужно запустить сигналы на следующем шаге.
Почему же фиксирующие точки будут стремиться к окружности?
Обозначим:
, — расстояние «до начала» от точек, фиксирующих горизонтальный сигнал;
, — рассточние от горизонтальной оси до точек, фиксирующих вертикальный сигнал в столбце с индексом ;
Тогда время запуска вертикального сигнала: (для каждого из суммы нам нужно от центра отойти на вправо, вернуться, влево, вернуться), что асимптотически . Аналогично, время от запуска вертикального сигнала до достижения им высоты : . Определим радиус окружности, как , то есть имеем . Как мы уже поняли, время образования точки на столбце на расстоянии : . Эта точка лежит на окружности радиуса (теорема Пифагора), то есть , но , то есть мы получили, что . А это значит, что все такие (вертикальные фиксирующие) точки будут находится примерно на том же расстоянии от центра, что и горизонтальные фиксирующие. Следовательно, они буду образовывать фигуру, близкую к окружности.
Красивая картинка, проясняющая ситуацию.
Спасибо Арсену за прототип солнышка!
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.
Комментариев нет:
Отправить комментарий