Нахождение точек пересечения двух окружностей

Март 13, 2013

Даны координаты центров окружностей и их радиусы. Необходимо найти точки пересечения этих окружностей.

Кликните на картинке, что бы посмотреть как это работает

1й способ решения задачи.

Точка P1 является центром первой окружности радиусом R1 и точка P2 центром второй окружности радиусом R2.

Обозначим:

  • h - высота треугольника P1P3P2 (расстояние между точками P3 и P0)
  • a - расстояние между точками P1 и P0
  • b - расстояние между точками P2 и P0
  • d = a + b; - расстояние между точками P1 и P2

Проверяем, если R1 + R2 < d, тогда окружности не пересекаются, т.к. лежат отдельно, если |R1 - R2| > d, тогда окружности так же не пересекаются, т.к. одна окружность находится внутри другой.

Рассмотрим 2 прямоугольных треугольника, P1P3P0 и P2P3P0. Получаем:

точки пересечения окружностей

точки пересечения окружностей

Так как эти треугольники имеют общий катет (h), тогда:
точки пересечения окружностей

Выразим a через b:
точки пересечения окружностей
тогда,
точки пересечения окружностей
точки пересечения окружностей
точки пересечения окружностей
точки пересечения окружностей
точки пересечения окружностей
Зная b, находим а
точки пересечения окружностей

Найдем точку P0 с помощью векторного параметрического уравнения прямой:
Векторное параметрическое уравнение прямой

Зная координаты точки P0 находим координаты точек P3 и P4. Для этого возмем единичный вектор от P1 до P2, повернем его на +90 градусов для P3 (-90 градусов для P4) и умножим на h.
Таким образом находим координаты точки P3:
Векторное параметрическое уравнение прямой
Векторное параметрическое уравнение прямой

Аналогично находим координаты точки P4:
Векторное параметрическое уравнение прямой
Векторное параметрическое уравнение прямой

Реализацию этого способа вы найдете в исходном коде этой страницы, метод Circle.moGetCrossPoints


2й способ решения задачи.

Так как точки пересечения окружностей общие, тогда запишем уравнения окружностей в виде системы уранений:
система уравнений окружностей

Для упрощения преобразований, переместим центр окружности 1 в начало координат и пересчитаем координаты центра второй окружности:
система уравнений окружностей

Перепишем систему уранений для новых координат:
система уравнений окружностей

Раскроем скобки во втором уравнении:
система уравнений окружностей

Вычтем из второго уравнения первое и перенесем известные в правую часть:
система уравнений окружностей

Выразим:

Если XP2 не равен 0, тогда подставляем X в уравнение первой окружности:

Раскрываем скобки и избавляемся от знаменателя:

Как видим у нас получается квадратное уравнение, обозначим:

Тогда:

  • Если D < 0, значит окружности не пересекаются
  • Если D = 0, значит окружности соприкасаются и имееют одну точку пересечения
  • Если D > 0, значит окружности пересекаются и имеют две точки пересечения.

Если XP2 = 0, тогда решаем через Y и получаем:

Помним, если под корнем число отрицательное, значит окружности не пересекаются, если равно 0, тогда окружности соприкасаются и имееют одну точку пересечения, если число больше 0, тогда X может быть как отрицательным, так и положительным.

Реализацию этого способа вы найдете в исходном коде этой страницы, метод Circle.moGetCrossPoints2

на рекламе кликнуть тут:

All content copyright (c) 2012 Vladislav Litunovskiy. All Rights Reserved.