У меня есть следующая геометрическая проблема: Вам дан круг с центром в начале координат - C (0, 0) и радиусом 1. Внутри круга даны N точек, которые представляют центры N различных кругов.Вам предлагается найти минимальный радиус маленьких кругов (радиус всех кругов равен), чтобы покрыть всю границу большого круга.
Количество кругов: 3 ≤ N ≤10000, и проблема должна быть решена с точностью до десятичных дробей P, где 1 ≤ P ≤ 6.
Например:
N = 3 и P = 4
и координаты:
(0,193, 0,722)
(-0,158, -0,438)
(-0,068, 0,00)
Радиус маленьких кружков: 1,0686.
Iесть следующая идея, но моя проблема заключается в ее реализации.Идея состоит в бинарном поиске, чтобы найти радиус, и для каждого значения, заданного бинарным поиском, попытаться найти все точки пересечения между маленькими кружками и большими.Каждое пересечение будет иметь в результате дугу.Следующим шагом является «проецирование» координат дуг на ось X и ось Y, в результате получается ряд интервалов.Если при воссоединении интервалов от оси X и Y в результате получается интервал [-1, 1] на каждой оси, это означает, что весь круг покрыт.
Чтобы избежать проблем с точностью, я подумал о поиске между 0 и 2 × 10 P , а также о том, чтобы радиус был равен 10 P , что исключало цифры послезапятая, но моя проблема в том, чтобы выяснить, как смоделировать пересечение окружностей, а затем узнать, образует ли воссоединение результирующих интервалов интервал [-1, 1].
Любые предложения приветствуются!