Круговые круговые точки пересечения

Как я вычисляю точки пересечения двух кругов. Я ожидал бы там быть или два, один или никакие точки пересечения во всех случаях.

У меня есть координаты X и Y центральной точки и радиус для каждого круга.

Ответ в Python был бы предпочтен, но любой рабочий алгоритм будет приемлем.

53
задан animuson 3 February 2015 в 12:18
поделиться

1 ответ

Пересечение двух окружностей

Написано Полом Бурком

В следующем примечании описывается, как найти точку пересечения (s) между двумя окружностями на плоскости используются следующие обозначения. В цель - найти две точки P 3 = (x 3 , y 3 ), если они существуют.

Intersection of 2 circles

Сначала вычислите расстояние 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

Источник: http://paulbourke.net/geometry/circlesphere/

90
ответ дан 7 November 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: