Алгоритм вычисления позиций случайных кругов, чтобы они не перекрывались

У меня следующая проблема.

У меня большой регион, заполненный случайным количеством кругов разных размеров. Если новый круг со случайным радиусом вставлен в случайное местоположение, я хотел бы найти для него ближайшую позицию, чтобы он не перекрывался с любым другим. Оптимально, если круги остаются близко.

Количество кругов и их размер ограничены, но случайны. Область будет довольно большой (2500x2500, может быть), поэтому массив пикселей, как предлагаетсяВот не может быть и речи. Человек, который ответил на тот же вопрос, предложил сетку, в которой ячейки имеют размер кругов. Это решило бы мою проблему, используя ячейки размером с максимально возможный круг, но я бы хотел, чтобы круги оставались как можно ближе, чтобы они не полностью удовлетворяли моим потребностям.

Очень простой подход состоит в обнаружении столкновений при размещении нового круга и удалении его от круга, с которым он сталкивается. После этого снова проверьте наличие коллизий и повторите процесс. Это, очевидно, не очень элегантно и склонно к бесконечным циклам (чаще, чем вы думаете).

The goal is to find the closest possible position for the newly inserted circle so it does not overlap with anyone else.

Полицейское управление
Очень хорошая вещь, но другой вопрос, а не моя главная цель, состоит в том, чтобы переставить столько кругов, сколько необходимо, вместо того, чтобы перемещать только один, как будто они «толкают». друг с другом. Я предпочитаю расстояние по количеству пройденных кругов. То есть, я бы предпочел, чтобы многие круги перемещались чуть меньше одного круга, чтобы отойти очень далеко от своего исходного положения.

Ответы на вопрос(3)

Ваш ответ на вопрос