Как найти точку пересечения окружностей
Paul Bourke
Перевод Кантора И.А.
Будем рассматривать нашу задачу из системы координат с началом в центре первой окружности.
Определить центр окружности по каноническому уравнению вида Ax 2 + Ay 2 + a1x + a2y + a0 = 0, где A =/= 0, довольно просто — это (-a1/2A, -a2/2A);
перенести систему координат можно простым преобразованием
— подставить вместо старых переменных их новые значения в уравнения.
В такой системе координат уравнения окружностей можно записать как
(1) x 2 + y 2 = R 2 (2)(x-a) 2 + (y-b) 2 = r 2
Раскрывая скобки, вычитая (1) из (2) и приводя подобные, получаем другой вид (2):
-2ax-2by = R 2 — r 2 — a 2 — b 2 .
Если еще упростить и немного поменять обозначения, то (2) приведется к виду
ax+by=C, где С — новое обозначение выражения справа.
Таким образом, имеем систему:
(1) x 2 + y 2 = R 2 (2) ax + by = C,
решение которой, надеюсь, не составит проблем (например, подойдет подстановка — естественно с учетом случаев a=0, b=0 и т.п.) (2) в (1) и имеем простое квадратное уравнение на одну из переменных.
Решив его и получив из (2) значение оставшейся переменной, имеем(если и только если она есть) точку пересечения.
Пусть нужно найти пару точек P3 пересечения, если они существуют.
Для начала найдем расстояние между центрами окружностей. d = || P1 — P0 ||. Если d > r0 + r1, тогда решений нет: круги лежат отдельно. Аналогично в случае d a 2 + h 2 = r0 2 and b 2 + h 2 = r1 2
Используя равенство d = a + b, мы можем разрешить относительно a:
a = (r0 2 — r1 2 + d 2 ) / (2 d)
В случае соприкосновения окружностей, это, очевидно, превратится в r0, так как: d = r0 + r1
Решим относительно h, подставив в первое уравнение h 2 = r0 2 — a 2
Таким образом, получаем координаты точек P3 = (x3,y3):
debug64
Нахождение точек пересечения двух окружностей
Mon Mar 13, 2017 by debug64 in math
Даны координаты центров окружностей и их радиусы. Необходимо найти точки пересечения этих окружностей.
Кликните на картинке, что бы посмотреть как это работает.
Точка P1 является центром первой окружности радиусом R1 и точка P2 центром второй окружности радиусом R2.
Проверяем, если R1 + R2 < d, тогда окружности не пересекаются, т.к. лежат отдельно, если |R1 — R2| > d, тогда окружности так же не пересекаются, т.к. одна окружность находится внутри другой.
Так как эти треугольники имеют общий катет (h), тогда:
Найдем точку 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
Пересечение двух окружностей
Чтобы использовать калькулятор, введите координаты x и y центра и радиус каждой окружности.
Формулы для расчета приведены под калькулятором.
Точки пересечения двух окружностей
Первая окружность
Вторая окружность
Точность вычисления
Знаков после запятой: 2
Рассчитать
Проверка расстояния между окружностями
Файл очень большой, при загрузке и создании может наблюдаться торможение браузера.
Загрузить
Ссылка Сохранить Виджет
Пересечение окружностей
Сама по себе задача нахождения точек пересечения двух окружностей достаточно проста, однако предварительно надо проанализировать если ли вообще точки пересения у данных двух окружностей. Поэтому начать надо с вычисления расстояния d в декартовых координатах между центрами окружностей и сравнения его с радиусами окружностей r1 и r2.
При этом возможно следующие случаи (расстояние между центрами показано красным отрезком):






Если окружности действительно пересекаются, калькулятор использует следующие формулы (в-основном выведенные из теоремы Пифагора), проиллюстрированные рисунком ниже:

Сначала калькулятор находит отрезок a
Чтобы найти точку P3, калькулятор использует следующую формулу (в векторном виде):
И наконец, чтобы найти точки пересечения, калькулятор использует следующие уравнения:
Первая точка:
Обратите внимание на разные знаки перед вторым слагаемым
По теме также можно посмотреть следующие ссылки (на английском языке): Circle-Circle Intersection и Circles and spheres
Точки пересечения двух окружностей
Даны две окружности
Найти точки их пересечения
Если попробовать решить аналитически эту задачу, то после сокращений можно получить уравнение прямой, проходящей через две точки пересечения окружностей. Далее находим точки пересечения этой прямой и любой окружноси.
int cross_circle ( double x1, double y1, double r1, double x2, double y2, double r2, point &p1, point &p2)
if (abs (x1 — x2) return 3;
double a = 2.0 * (x2 — x1);
double b = 2.0 * (y2 — y1);
double c = x1 * x1 + y1 * y1 — r1 * r1 — (x2 * x2 + y2 * y2 — r2 * r2);
return cross_line_circle (line (a, b, c), circle (x1, y1, r1), p1, p2);
>
27.06.2007, 15:19
По всем вопросам обращаться: rumterg@gmail.com