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

Упаковка кругов

Круги, растущие до первого касания, плотно заполняют плоскость; аполлонова сетка — бесконечное вписывание по теореме Декарта.

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

Пузырьки пены, галька на пляже, клетки на срезе ткани — круги охотно заполняют пространство. Этот слой делает то же двумя способами: жадно и случайно — или по строгой геометрии аполлоновой сетки, где в каждую щель между тремя касающимися кругами вписывается новый, и так до бесконечности.

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

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

Аполлонова сетка начинается с большого круга и вписанных в него трёх, касающихся друг друга. Для любых четырёх попарно касающихся кругов теорема Декарта связывает их кривизны k = 1/r; у внешнего круга, охватывающего остальные, кривизна отрицательна. Отсюда простое правило: у двух кругов, касающихся одной и той же тройки, сумма кривизн равна 2(k₁ + k₂ + k₃). То же верно для произведений kz, где z — центр круга как комплексное число, и это сразу даёт место для нового круга. Генератор заполняет щели от крупных кругов к мелким, пока круги не станут мельче, чем «Мин. радиус», или их число не достигнет значения «Кругов».

(k₁ + k₂ + k₃ + k₄)² = 2(k₁² + k₂² + k₃² + k₄²), k = 1/r k₄′ = 2(k₁ + k₂ + k₃) − k₄ k₄′z₄′ = 2(k₁z₁ + k₂z₂ + k₃z₃) − k₄z₄, z = x + iy

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

Круги, касающиеся трёх данных, изучал Аполлоний Пергский в III веке до нашей эры; его книга «О касаниях» утрачена. В 1643 году Декарт в письме принцессе Елизавете Пфальцской вывел соотношение между радиусами четырёх касающихся кругов. Теорему не раз открывали заново, а в 1936 году нобелевский лауреат по химии Фредерик Содди изложил её стихами в журнале Nature — стихотворение называлось «Точный поцелуй». Комплексную версию для центров опубликовали Джеффри Лагариас, Колин Мэллоуз и Аллан Уилкс в 2002 году. Сама сетка — фрактал: размерность Хаусдорфа того, что остаётся между кругами, около 1,3057. А если начальные кривизны целые, например −1, 2, 2, 3, то целыми будут и все остальные — такие сетки до сих пор изучают теоретики чисел.

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

  • «Способ» «аполлонова сетка», «Кругов» побольше и «Мин. радиус» поменьше — фрактал уходит вглубь, пока хватает пикселей.
  • Сблизьте «Мин. радиус» и «Макс. радиус» — выйдет ровная пена из почти одинаковых кругов; разведите их — иерархия от валунов до песка.
  • «Вид» «кольца» и «Колец» 3–6 превращают круги в мишени или спилы деревьев; «Раскраска» «по размеру» красит их по логарифму радиуса.
  • Положите упаковку с видом «кольца» поверх слоя «Градиентная сетка» с режимом наложения «умножение» — кольца окрасятся мягкими переливами.

Параметры

Способ
Аполлонова сетка не бывает бесшовной случайная · аполлонова сетка
Кругов
Не больше стольких кругов
Мин. радиус
Меньшие круги не рисуются — зазоры остаются пустыми
Макс. радиус
Зазор
Вид
диски · кольца · контуры · точки
Колец
Сколько концентрических колец в каждом круге
Раскраска
по размеру · случайно · градиент
Толщина контура