У меня есть прямоугольная область, где есть круги с равным радиусом. Я хочу найти, какие круги накладываются на другие круги (выход представляет собой список из 2-элементных наборов перекрывающихся кругов).Найти перекрывающиеся круги
Я знаю, как проверить, перекрываются ли два круга (расстояние между их центрами меньше диаметра). Я могу выполнить эту проверку для каждой пары кругов, но мне было интересно, есть ли лучший алгоритм (быстрее, чем O(n^2)
).
EDIT
Количество кругов, как правило, около 100 и перекрытий не будут происходить очень часто.
Вот несколько контекстов: Прямоугольник - поле битвы в игре. Движение единиц выполняется на небольших шагах, и я пытаюсь обнаружить столкновения между единицами.
Хороший вопрос. :) Мне кажется, что вы можете сделать какой-то алгоритм развертки. – blazs
Хммм. , , все круги могут пересекаться со всеми другими кругами. Для меня это говорит о том, что вы не можете сделать лучше, чем O (n^2), в худшем случае - хотя может быть эвристика для оптимизации этого. –
@GordonLinoff Я думаю, что должен быть чувствительный к выходу алгоритм --- тот, который работает во времени пропорционально количеству перекрытий (и количеству кругов); это имеет место с некоторой связанной задачей пересечения сегментов. – blazs