Как я вычисляю точки пересечения двух кругов. Я ожидал бы там быть или два, один или никакие точки пересечения во всех случаях.
У меня есть координаты X и Y центральной точки и радиус для каждого круга.
Ответ в Python был бы предпочтен, но любой рабочий алгоритм будет приемлем.
Написано Полом Бурком
В следующем примечании описывается, как найти точку пересечения (s) между двумя окружностями на плоскости используются следующие обозначения. В цель - найти две точки P 3 = (x 3 , y 3 ), если они существуют.
Сначала вычислите расстояние d между центрами кругов. d = || P 1 - P 0 ||.
- Если d> r 0 + r 1 , то решений нет, круги отдельные.
- Если d <| r 0 - r 1 | то решений нет, потому что один круг содержится в другом.
- Если d = 0 и r 0 = r 1 то круги совпадают и имеется бесконечное количество решений.
Учитывая два треугольника P 0 P 2 P 3 и P 1 P 2 P 3 мы можем записать
a 2 + h 2 = r 0 2 и b 2 + h 2 = r 1 2
Используя d = a + b, мы можем найти a,
a = (r 0 2 - r 1 2 + d 2 ) / (2 d)
Легко показать, что это сводится к r 0 , когда два круга соприкасаются в одной точке, то есть: d = r 0 + r 1 Решите относительно h, подставив a в первое уравнение, h 2 = r 0 2 - a 2
Итак
P 2 = P 0 + a (P 1 - P 0 ) / d
И, наконец, P 3 = (x 3 , y 3 ) через P 0 = (x 0 , y 0 ), P 1 = (x 1 , y 1 ) и P 2 = (x 2 , y 2 ), равно
x 3 = x 2 + - h (y 1 - y 0 ) / d
y 3 = y 2 - + h (x 1 - x 0 ) / d