Ближайшее размещение к точке будет либо в точке, либо касанием круга.
поэтому сначала проверьте точку, а затем обведите новый круг по краю каждого существующего круга, рассчитав расстояние от точки и, если вы перекрывались, и отслеживая точку минимального расстояния. Остановитесь, когда пройдете каждый круг.
то есть. отметьте все точки на зеленых линиях плюс белый кружок. где зеленая линия представляет собой круг с радиусом красного плюс синий
вам нужно проверить всю зеленую линию, а не только пересечения, чтобы охватить эти крайние случаи.
Очевидно, что размер шага вашего обхода будет важен с точки зрения производительности. Но поскольку вы заявляете, что производительность не является проблемой, выберите значение, соответствующее разрешению вашего выходного значения. то есть плавать, долго?
уточнение:
Мое предложение состоит в том, чтобы перебрать все точки вокруг каждого круга, проверяя их на совпадение со всеми остальными кругами в каждой точке. нет хитрости
Если в примере на картинке указано количество кругов и разрешение, это не должно быть проблемой для стандартного ПК.
у нас есть 20 кругов среднего радиуса 200, так что примерно 20 * 2 π * 200 точек * 20 испытаний на пересечение = 4800000 итераций
Замечания:
Подобные итеративные подходы несовершенны тем, что размер шага, в данном случае разрешение вашего вывода, может сильно повлиять на результат.
Скажем, у меня есть два красных круга на расстоянии 2 пикселя и синий круг с радиусом 1 пиксель, чтобы сжать их между собой. Очевидно, что с любым из двух пикселей в качестве центра синего круга он будет перекрывать один из красных. но очевидно, что есть место для круга, если центр находится между двумя пикселями.
Отсюда мой комментарий с вопросом о разрешении вывода. который вы сказали, может быть что угодно.
Вы также можете решить уравнение одновременности для каждой пары окружностей, радиус которых увеличивается на радиус синего круга.
это даст вам точки, где синий круг будет касаться обоих красных кругов более точно, чем итерация.
Тем не мение. Есть несколько условий, когда, если вы только сделаете это, вы получите неправильный ответ или не получите ответа. то есть.
1 или нет кругов
2 или более кругов, но с заданной точкой далеко и за их пределами.
много кругов, но с целевой точкой близко к поверхности