Замощения и мозаики

Лабиринт

Равномерное остовное дерево по алгоритму Уилсона: из любой клетки в любую ведёт ровно один путь. Бесшовно на торе.

  • векторная геометрия
  • бесшовный тайл
  • экспорт в SVG
Открыть в редакторе →

Идеальный лабиринт — такой, где из любой клетки в любую ведёт ровно один путь: нет ни колец, ни отрезанных закоулков. На языке математики это остовное дерево сетки: граф, который связывает все клетки и не содержит циклов. Деревьев у сетки астрономически много: у квадрата 20 × 20 их около 10¹⁸⁷ — несравнимо больше, чем атомов в видимой Вселенной. Хороший генератор должен выбирать среди них честно.

Как это устроено

У популярных алгоритмов есть перекос. Поиск в глубину тянет длинные коридоры с редкими развилками, алгоритм Прима сыплет короткими тупиками. Алгоритм Дэвида Уилсона выдаёт каждое остовное дерево с одинаковой вероятностью. Он начинает с одной клетки-корня и дальше повторяет: из случайной клетки, ещё не вошедшей в лабиринт, запускает случайное блуждание, пока оно не наткнётся на лабиринт, затем стирает все петли, которые блуждание успело накрутить, и пристраивает оставшийся путь. Стирание петель достаётся даром: в каждой клетке запоминается только последний выход, и старые петли исчезают сами.

P(лабиринт T) = 1 / τ(G) — для каждого из τ(G) деревьев сетки G τ(G)^(1/N) → 3,2099… для квадратной сетки из N клеток, N → ∞ ходов в дереве из N клеток — ровно N − 1

В режиме тайла сетка свёрнута в тор: правый край склеен с левым, верхний с нижним, и лабиринт продолжается во все стороны без шва. «Петли» пробивают стену в части тупиков, охотнее — в соседний тупик, и дерево превращается в лабиринт с кольцевыми маршрутами. Раскраска «по расстоянию» — это поиск в ширину от корня: цвет растекается по ходам, как вода, и показывает, как далеко по коридорам лежат клетки, соседние на вид.

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

Петлестёртое случайное блуждание ввёл Грегори Лоулер в 1980 году. Равномерное остовное дерево умел строить и более ранний алгоритм Олдоса — Бродера, но медленно; Дэвид Уилсон в 1996 году показал, что стирание петель даёт в точности равномерное распределение и работает быстрее. Путь между двумя клетками равномерного лабиринта распределён так же, как петлестёртое блуждание, а в пределе мелкой сетки это фрактальная кривая размерности 5/4. Одед Шрамм в 2000 году связал её со стохастической эволюцией Лёвнера, а в 2004-м вместе с Лоулером и Венделином Вернером доказал её конформную инвариантность. А считать сами деревья умел ещё Густав Кирхгоф в 1847 году — через определитель матрицы.

Что покрутить

  • «Сетка» «шестиугольная» даёт шесть выходов из клетки — коридоры становятся извилистее и живее.
  • «Петли» 0,2–0,4 превращают дерево в лабиринт с кольцами: правило одной руки перестаёт гарантировать выход.
  • «Раскраска» «по ветвям» красит сначала самые длинные ветви — видно, как устроено дерево.
  • Большая «Ширина хода» и «Скругление» 1 превращают лабиринт в трубы или кораллы; «Вид» «стены» — в классическую головоломку из газеты.
  • Положите сверху эффект «Растр» — лабиринт превратится в оттиск из точек.

Параметры

Сетка
квадратная · шестиугольная
Клеток
Сколько клеток по короткой стороне
Вид
ходы · стены · ходы и стены
Ширина хода
Скругление
Насколько плавно ход огибает повороты
Раскраска
По расстоянию — цвет растекается от корня вдоль ходов, как заливка по расстоянию · один цвет · по ветвям
Петли
Доля тупиков, которые пробиваются насквозь: появляются кольцевые пути
Цвет
Цвет стен
В режиме «ходы и стены»
Толщина стен