Как я могу найти минимальный круг, включающий несколько заданных точек? - PullRequest
9 голосов
/ 23 июня 2010

Я дал несколько точек (2D-координаты) и хочу найти наименьший круг, который включает в себя все эти точки.Алгоритм не должен быть очень эффективным (хотя, естественно, это было бы неплохо).

Ответы [ 2 ]

7 голосов
/ 23 июня 2010
6 голосов
/ 27 июня 2013

Это так называемая проблема наименьших вмещающих шариков (в вашем случае, наименьший вмещающий круг ), также известная как Miniball .Существует несколько алгоритмов и реализаций для этой проблемы - все нижеприведенное является линейно-временным решением (т. Е. С учетом n шаров они работают в O (n) , если вы считаете,размер d фиксированный, d = 2 в вашем случае):

  • Для 2D и 3D, Реализация Гертнера вероятно самый быстрый.

  • Для более высоких измерений (скажем, до 10 000) взгляните на https://github.com/hbf/miniball,, который является реализацией алгоритма Гертнера, Куц,и Фишер (примечание: я один из соавторов).

  • Для очень и очень больших размеров алгоритмы core-set (приближение) будут быстрее.

Примечание: Если вы ищете алгоритм для вычисления наименьшей охватывающей сферы из сфер , вы найдете реализацию C ++ в Библиотека алгоритмов вычислительной геометрии (CGAL) .(Вам не нужно использовать весь CGAL; просто извлеките требуемый заголовок и исходные файлы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...