Я ищу концепцию для распределения кругов в квадрате случайным образом, чтобы они не перекрывались. Все круги имеют одинаковый размер. Площадь, покрываемая кругами, может быть высокой, вплоть до теоретического максимума ок. 90% площади (в которой они полностью упорядочены). Необходимо разместить около 200 кругов, и я хочу точно указать количество кругов. (Распределение необходимо в качестве входных данных для генерации модели FE-анализа, btw)
С помощью прямого алгоритма, который последовательно размещает круги на свободном месте, невозможно охватить более 54%, что не является неожиданностью, так как в какой-то момент просто нет места. Поэтому предыдущие SO-потоки действительно не покрывают мою проблему (закрытие: Размещение случайных кругов без перекрытия (и без использования грубой силы)?
При простом случайном смещении окружностей упорядоченного множества окружностей распределение кажется "не случайным".
Все концепции, которые я придумал до сих пор, чувствуют либо сложный, либо грубый стиль. Подход, который мне больше всего нравится, состоит в том, чтобы определить все возможные положения, на которых можно разместить следующий круг, чтобы оставшееся пространство было достаточно большим, чтобы поместить оставшиеся круги. Затем выберите одно из этих положений случайным образом и так далее. Но: определить "емкость" левого пространства непросто и численно очень сложно. Я не знаю, как это сделать, и можно ли это сделать с разумными численными усилиями.
Вторая идея - симуляция бильярда: поместите все круги в любой узор и имитируйте большой бильярд. Довольно грубая сила и численно очень дорогостоящая. Я немного боюсь проблем с дескретизацией.
Число 3 более математично и основано на определении потенциального поля для каждого круга со случайной "силой", так что между кругами есть какое-то гравитация и вычисление равновесного состояния. Разработка математической модели для этого не является тривиальной и будет довольно миссией...
Итак - наконец - вопрос: каковы ваши предложения по решению проблемы как можно более легкие? Вы знаете алгоритмы, на которые я должен обратить внимание, чтобы решить эту проблему? Каковы ваши замечания к моим идеям?
Спасибо вам всем заблаговременно! Я очень рад прочитать ваши ответы.