Пузырьки пены, галька на пляже, клетки на срезе ткани — круги охотно заполняют пространство. Этот слой делает то же двумя способами: жадно и случайно — или по строгой геометрии аполлоновой сетки, где в каждую щель между тремя касающимися кругами вписывается новый, и так до бесконечности.
Как это устроено
Если «Способ» — «случайная», генератор бросает точку и раздувает вокруг неё круг, пока тот не коснётся ближайшего соседа с поправкой на «Зазор». Сверху радиус ограничивает «Макс. радиус», для каждого круга слегка случайный, а если места не хватает даже на «Мин. радиус», точка отвергается. Поставленные круги больше не двигаются: первые выходят крупными, потом мелочь забивает щели. Чтобы не тратить попытки впустую, генератор ведёт карту мест, где круг ещё помещается. В режиме тайла расстояния считаются через край, и упаковка бесшовна.
Аполлонова сетка начинается с большого круга и вписанных в него трёх, касающихся друг друга. Для любых четырёх попарно касающихся кругов теорема Декарта связывает их кривизны k = 1/r; у внешнего круга, охватывающего остальные, кривизна отрицательна. Отсюда простое правило: у двух кругов, касающихся одной и той же тройки, сумма кривизн равна 2(k₁ + k₂ + k₃). То же верно для произведений kz, где z — центр круга как комплексное число, и это сразу даёт место для нового круга. Генератор заполняет щели от крупных кругов к мелким, пока круги не станут мельче, чем «Мин. радиус», или их число не достигнет значения «Кругов».
Немного истории
Круги, касающиеся трёх данных, изучал Аполлоний Пергский в III веке до нашей эры; его книга «О касаниях» утрачена. В 1643 году Декарт в письме принцессе Елизавете Пфальцской вывел соотношение между радиусами четырёх касающихся кругов. Теорему не раз открывали заново, а в 1936 году нобелевский лауреат по химии Фредерик Содди изложил её стихами в журнале Nature — стихотворение называлось «Точный поцелуй». Комплексную версию для центров опубликовали Джеффри Лагариас, Колин Мэллоуз и Аллан Уилкс в 2002 году. Сама сетка — фрактал: размерность Хаусдорфа того, что остаётся между кругами, около 1,3057. А если начальные кривизны целые, например −1, 2, 2, 3, то целыми будут и все остальные — такие сетки до сих пор изучают теоретики чисел.
Что покрутить
- «Способ» «аполлонова сетка», «Кругов» побольше и «Мин. радиус» поменьше — фрактал уходит вглубь, пока хватает пикселей.
- Сблизьте «Мин. радиус» и «Макс. радиус» — выйдет ровная пена из почти одинаковых кругов; разведите их — иерархия от валунов до песка.
- «Вид» «кольца» и «Колец» 3–6 превращают круги в мишени или спилы деревьев; «Раскраска» «по размеру» красит их по логарифму радиуса.
- Положите упаковку с видом «кольца» поверх слоя «Градиентная сетка» с режимом наложения «умножение» — кольца окрасятся мягкими переливами.