Пересечение двух окружностей
Даны две окружности, каждая определена координатами своего центра и радиусом. Требуется найти все их точки пересечения (либо одна, либо две, либо ни одной точки, либо окружности совпадают).
Решение
Предположим, не теряя общности, что центр первой окружности — в начале координат (если это не так, то перенесём центр в начало координат, а при выводе ответа будем обратно прибавлять координаты центра). Тогда мы имеем систему двух уравнений:
Вычтем из второго уравнения первое, чтобы избавиться от квадратов переменных:
Таким образом, мы свели задачу о пересечении двух окружностей к задаче о пересечении первой окружности и следующей прямой:
А решение последней задачи описано в соответствующей статье.
Единственный вырожденный случай, который надо рассмотреть отдельно — когда центры окружностей совпадают. Действительно, в этом случае вместо уравнения прямой мы получим уравнение вида 0 = С, где C — некоторое число, и этот случай будет обрабатываться некорректно. Поэтому этот случай нужно рассмотреть отдельно: если радиусы окружностей совпадают, то ответ — бесконечность, иначе — точек пересечения нет.
Как найти точки пересечения окружностей на графике
Перевод Кантора И.А.
Подход 1
Будем рассматривать нашу задачу из системы координат с началом в центре первой окружности.
Определить центр окружности по каноническому уравнению вида 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) значение оставшейся переменной, имеем(если и только если она есть) точку пересечения.
Подход 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):
Пересечение двух окружностей
Этот онлайн калькулятор находит точки пересечения двух окружностей, если они существуют
Чтобы использовать калькулятор, введите координаты x и y центра и радиус каждой окружности.
Формулы для расчета приведены под калькулятором.
Точки пересечения двух окружностей
Первая окружность
Вторая окружность
Пересечение окружностей
Сама по себе задача нахождения точек пересечения двух окружностей достаточно проста, однако предварительно надо проанализировать если ли вообще точки пересения у данных двух окружностей. Поэтому начать надо с вычисления расстояния d в декартовых координатах между центрами окружностей и сравнения его с радиусами окружностей r1 и r2.
При этом возможно следующие случаи (расстояние между центрами показано красным отрезком):
Случай | Описание | Условие |
---|---|---|
Тривиальный случай — окружности совпадают (это одна и та же окружность) | ||
Окружности не касаются друг друга | r1 + r2″ /> | |
Одна окружность содержится внутри другой и не касается ее | ||
Окружности пересекаются в двух точках | Не выполнено ни одно из условий выше | |
Окружности соприкасаются в одной точке | Частный случай предыдущего |
Если окружности действительно пересекаются, калькулятор использует следующие формулы (в-основном выведенные из теоремы Пифагора), проиллюстрированные рисунком ниже:
Сначала калькулятор находит отрезок a
Чтобы найти точку P3, калькулятор использует следующую формулу (в векторном виде):
И наконец, чтобы найти точки пересечения, калькулятор использует следующие уравнения:
Первая точка:
Обратите внимание на разные знаки перед вторым слагаемым
По теме также можно посмотреть следующие ссылки (на английском языке): Circle-Circle Intersection и Circles and spheres
http://algolist.manual.ru/maths/geom/intersect/circlecircle2d.php
http://planetcalc.ru/8098/
Как найти точку пересечения окружностей
Геометрические задачи, решаемые аналитически при помощи приемов алгебры, являются неотъемлемой частью программы школьного обучения. Кроме логического и пространственного мышления они развивают понимание ключевых взаимосвязей между сущностями окружающего мира и абстракциями, применяемыми людьми для формализации отношений между ними. Нахождение точек пересечения простейших геометрических фигур — один из типов подобных задач.
Инструкция
Предположим, что даны две окружности, заданные своими радиусами R и r, а также координатами их центров — соответственно (x1, y1) и (x2, y2). Требуется вычислить, пересекаются ли эти окружности, и если да, то найти координаты точек пересечения.Для простоты можно предположить, что центр одной из заданных окружностей совпадает с началом координат. Тогда (x1, y1) = (0, 0), а (x2, y2) = (a, b). Также имеет смысл предполагать, что a ≠ 0 и b ≠ 0.
Таким образом, координаты точки (или точек) пересечения окружностей, если они есть, должны удовлетворять системе из двух уравнений:x^2 + y^2 = R^2,
(x — a)^2 + (y — b)^2 = r^2.
После раскрытия скобок уравнения приобретают вид:x^2 + y^2 = R^2,
x^2 + y^2 — 2ax — 2by + a^2 + b^2 = r^2.
Теперь первое уравнение можно вычесть из второго. Таким образом, квадраты переменных исчезают, и возникает линейное уравнение: -2ax — 2by = r^2 — R^2 — a^2 — b^2. С его помощью можно выразить y через x:y = (r^2 — R^2 — a^2 — b^2 — 2ax)/2b.
Если подставить найденное выражение для y в уравнение окружности, задача сводится к решению квадратного уравнения: x^2 + px + q = 0, гдеp = -2a/2b,
q = (r^2 — R^2 — a^2 — b^2)/2b — R^2.
Корни этого уравнения позволят найти координаты точек пересечения окружностей. Если уравнение неразрешимо в действительных числах, то окружности не пересекаются. Если корни совпадают между собой, то окружности касаются друг друга. Если корни различны, то окружности пересекаются.
Если a = 0 или b = 0, то исходные уравнения упрощаются. Например, при b = 0 система уравнений примет вид:x^2 + y2 = R^2,
(x — a)^2 + y^2 = r^2.
После вычитания первого уравнения из второго получается:- 2ax + a^2 = r^2 — R^2.Его решение: x = — (r^2 — R^2 — a2)/2a. Очевидно, что в случае b = 0 центры обеих окружностей лежат на оси абсцисс, и у точек их пересечения будет одинаковая абсцисса.
Это выражение для x можно подставить в первое уравнение окружности и получить квадратное уравнение относительно y. Его корни — ординаты точек пересечения, если таковые существуют. Аналогичным образом находится выражение для y, если a = 0.
Если a = 0 и b = 0, но при этом R ≠ r, то одна из окружностей заведомо находится внутри другой, и точки пересечения отсутствуют. Если же R = r, то окружности совпадают, и точек их пересечения бесконечно много.
Если ни у одной из двух окружностей центр не совпадает с началом координат, то их уравнения будут иметь вид:(x — x1)^2 + (y — y1)^2 = R^2,
(x — x2)^2 + (y — y2)^2 = r^2.Если перейти к новым координатам, получающимся из старых методом параллельного переноса: x′ = x + x1, y′ = y + y1, то эти уравнения приобретают вид:x′^2 + y′^2 = R^2,
(x′ — (x1 + x2))^2 + (y′ — (y1 + y2))^2 = r^2.Задача, таким образом, сводится к предыдущей. Найдя решения для x′ и y′, можно легко вернуться к изначальным координатам, обратив уравнения для параллельного переноса.
Источники:
- как найти точки пересечения окружности с прямой
Как найти 2 точки пересечения 2-х окружностей?
Известны координаты центров и радиусы 2-х окружностей.
Как найти 2 точки пересечения, если таковые есть?
Пример на С++ приветствуется 🙂
6 ответов
Я просто не силён в школьной программе. Кто-нибудь может помочь упростить следующее выражение?
2 * sqrt(R2^2 — (y — y2)^2) * (x2 — x1) + 2 * y * (y2 — y1) = R1^2 — R2^2 + y2^2 — (x2 — x1)^2 — y1^2
Нужно привести его к квадратному уровнению.
Здесь y — переменная, остальное константы.
Здесь:
X1, Y1, R1 — координаты центра и радиус первой окружности.
X2, Y2, R2 — координаты центра и радиус второй окружности.
MPoint P1 — 1-я точка пересечения
MPoint P2 — 2-я точка пересечения
MPoint Near1 — точка, рядом с которой должна находиться одна из точек пересечения
bool GetCirclesIntersect(float X1, float Y1, float R1, float X2, float Y2, float R2, MPoint &P1, MPoint &P2, MPoint Near1)
// Ищем пересечение ближайшее только к Near1.
float C1 = R1 * R1 — R2 * R2 + Y2 * Y2 — (X2 — X1) * (X2 — X1) — Y1 * Y1, // заменяющая константа.
C2 = X2 — X1, // заменяющая константа.
C3 = Y2 — Y1, // заменяющая константа.
a = -4 * C2 * C2 — 4 * C3 * C3,
b = 8 * C2 * C2 * Y2 + 4 * C1 * C3,
c = 4 * C2 * C2 * R2 * R2 — 4 * C2 * C2 * Y2 * Y2 — C1 * C1,
X_1_1 = 0, X_1_2 = 0, Y_1 = 0, X_2_1 = 0, X_2_2 = 0, Y_2 = 0,
Leng1, Leng2;
float sqrtVal = b * b — 4 * a * c;
if ( sqrtVal < 0 || a == 0 )
if ( X1 == X2 && Y1 == Y2 && R1 == R2 ) // Если окружности совпадают, то будем считать, что точка тут:
P1.x = X1 — R1;
P1.y = Y1;
P2.x = X1 + R1;
P2.y = Y1;
return true;
>
return false;
>
Y_1 = (-b + sqrt(sqrtVal)) / (2 * a);
Y_2 = (-b — sqrt(sqrtVal)) / (2 * a);
X_1_1 = X1 + sqrt(R1 * R1 — (Y_1 — Y1) * (Y_1 — Y1));
X_1_2 = X1 — sqrt(R1 * R1 — (Y_1 — Y1) * (Y_1 — Y1));
X_2_1 = X2 + sqrt(R2 * R2 — (Y_2 — Y2) * (Y_2 — Y2));
X_2_2 = X2 — sqrt(R2 * R2 — (Y_2 — Y2) * (Y_2 — Y2));
P1.y = Y_1;
P2.y = Y_2;
Leng1 = sqrt((Near1.x — X_1_1) * (Near1.x — X_1_1) + (Near1.y — Y_1) * (Near1.y — Y_1)),
Leng2 = sqrt((Near1.x — X_1_2) * (Near1.x — X_1_2) + (Near1.y — Y_1) * (Near1.y — Y_1));
if ( Leng1 < Leng2 )
P1.x = X_1_1;
else
P1.x = X_1_2;
Leng1 = sqrt((Near1.x — X_2_1) * (Near1.x — X_2_1) + (Near1.y — Y_2) * (Near1.y — Y_2)),
Leng2 = sqrt((Near1.x — X_2_2) * (Near1.x — X_2_2) + (Near1.y — Y_2) * (Near1.y — Y_2));
if ( Leng1 < Leng2 )
P2.x = X_2_1;
else
P2.x = X_2_2;
Как найти координаты точек пересечения двух окружностей в пространстве?
Имеется две окружности в пространстве, нормали к которым совпадают с двумя ортами косоугольной системы координат. Третий орт перпендикулярен к остальным. Уравнения окружностей задаются в эллиптических системах координат (; ), базы которых связаны с двумя первыми ортами:
x1 = a * cosh(mu) * cos(nu1)
r1 = a * sinh(mu) * sin(nu1)
y1 = 0
z1 = 0
z2 = b * cosh(mu) * cos(nu2)
r2 = b * sinh(mu) * sin(nu2)
y2 = 0
x2 = 0
Имеется также угол пересечения первых двух ортов alpha.
Эти уравнения в трехмерном пространстве дают две окружности. Как можно найти координаты точек пересечения?
На рисунке представлено расположение поверхностей положения, получаемые в навигационной системе. Пересечение синей и зеленой поверхностей дают первую окружность. Пересечение красной и желтой — вторую. Учитывая, что поверхности получаются в результате определения навигационных параметров (mu, nu1, nu2) — считается что решение всегда существует, но не однозначно. Многозначность устраняется отделльно.
Точки пересечения окружности
Как рассчитать точки пересечения двух окружностей. Я ожидал бы, что во всех случаях будут две, одна или никакие точки пересечения.
У меня есть координаты x и y центральной точки и радиус для каждого круга.
Ответ на python будет предпочтительным, но любой рабочий алгоритм будет приемлемым.
5 ответов
Пересечение двух кругов
- Если d> r 0 + r 1, то решений нет, кружки разделены.
- Если d 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) / д
И, наконец, P 3 = (x 3, y 3) в терминах P 0 = (x 0, y 0), P 1 = (x 1, y 1) и P 2 = (x 2, y 2), есть
х 3 = х 2 + — ч (у 1 — у 0) / д
y 3 = y 2 — + h (x 1 — x 0) / d
Геометрические задачи, решаемые аналитически при помощи приемов алгебры, являются неотъемлемой частью программы школьного обучения. Кроме логического и пространственного мышления они развивают понимание ключевых взаимосвязей между сущностями окружающего мира и абстракциями, применяемыми людьми для формализации отношений между ними. Нахождение точек пересечения простейших геометрических фигур — один из типов подобных задач.
Предположим, что даны две окружности, заданные своими радиусами R и r, а также координатами их центров — соответственно (x1, y1) и (x2, y2). Требуется вычислить, пересекаются ли эти окружности, и если да, то найти координаты точек пересечения.Для простоты можно предположить, что центр одной из заданных окружностей совпадает с началом координат. Тогда (x1, y1) = (0, 0), а (x2, y2) = (a, b). Также имеет смысл предполагать, что a ≠ 0 и b ≠ 0.
Таким образом, координаты точки (или точек) пересечения окружностей, если они есть, должны удовлетворять системе из двух уравнений:x^2 + y^2 = R^2,
(x — a)^2 + (y — b)^2 = r^2.
После раскрытия скобок уравнения приобретают вид:x^2 + y^2 = R^2,
x^2 + y^2 — 2ax — 2by + a^2 + b^2 = r^2.
Теперь первое уравнение можно вычесть из второго. Таким образом, квадраты переменных исчезают, и возникает линейное уравнение: -2ax — 2by = r^2 — R^2 — a^2 — b^2. С его помощью можно выразить y через x:y = (r^2 — R^2 — a^2 — b^2 — 2ax)/2b.
Если подставить найденное выражение для y в уравнение окружности, задача сводится к решению квадратного уравнения: x^2 + px + q = 0, гдеp = -2a/2b,
q = (r^2 — R^2 — a^2 — b^2)/2b — R^2.
Корни этого уравнения позволят найти координаты точек пересечения окружностей. Если уравнение неразрешимо в действительных числах, то окружности не пересекаются. Если корни совпадают между собой, то окружности касаются друг друга. Если корни различны, то окружности пересекаются.
Если a = 0 или b = 0, то исходные уравнения упрощаются. Например, при b = 0 система уравнений примет вид:x^2 + y2 = R^2,
(x — a)^2 + y^2 = r^2.
После вычитания первого уравнения из второго получается:- 2ax + a^2 = r^2 — R^2.Его решение: x = — (r^2 — R^2 — a2)/2a. Очевидно, что в случае b = 0 центры обеих окружностей лежат на оси абсцисс, и у точек их пересечения будет одинаковая абсцисса.
Это выражение для x можно подставить в первое уравнение окружности и получить квадратное уравнение относительно y. Его корни — ординаты точек пересечения, если таковые существуют. Аналогичным образом находится выражение для y, если a = 0.
Если a = 0 и b = 0, но при этом R ≠ r, то одна из окружностей заведомо находится внутри другой, и точки пересечения отсутствуют. Если же R = r, то окружности совпадают, и точек их пересечения бесконечно много.
Если ни у одной из двух окружностей центр не совпадает с началом координат, то их уравнения будут иметь вид:(x — x1)^2 + (y — y1)^2 = R^2,
(x — x2)^2 + (y — y2)^2 = r^2.Если перейти к новым координатам, получающимся из старых методом параллельного переноса: x′ = x + x1, y′ = y + y1, то эти уравнения приобретают вид:x′^2 + y′^2 = R^2,
(x′ — (x1 + x2))^2 + (y′ — (y1 + y2))^2 = r^2.Задача, таким образом, сводится к предыдущей. Найдя решения для x′ и y′, можно легко вернуться к изначальным координатам, обратив уравнения для параллельного переноса.
Заданы две окружности разного радиуса точками центров , и радиусами и соответственно.
Будем вычислять координаты искомых точек пересечения окружностей в новой системе координат, связанной с векторами и , которые изображены на рисунке. Искать соответственно будем в виду .
Для начала напишем, чему равен вектор , вектор перпендикулярен , следовательно равен .
Коэффициенты и будем искать из системы уравнений
Заметим, что в уравнении третье слагаемое в правой части равно , т.к. векторы и перпендикулярны.
Мы, например, будем рассматривать точку с положительным знаком .
Радиус-вектор такой точки будет равен . Его координата равна . , .
Допустим есть точка с координатой равной (точка вхождения некой окружности). Нам надо научиться сравнивать их для добавления в строку состояний.
К сожалению, дальше упрощать ничего не получается Уже из этого выражения можно посчитать погрешность, так влоооом