Как определить пересекаются ли окружности
Перейти к содержимому

Как определить пересекаются ли окружности

Как определить пересекаются ли окружности

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):

Как в методе класса обозначить пересекаются ли круги или нет(Питон)

Он принимает координаты центра круга и его радиус, а потом находит площадь круга, его необходимо доработать, добавив ему ещё один метод def do_intersect , который будет принимать другой объект класса Circle и возвращать True или False в зависимости от того, пересекаются круги или нет. Но как это сделать я не знаю.

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

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

Чтобы использовать калькулятор, введите координаты x и y центра и радиус каждой окружности.

Формулы для расчета приведены под калькулятором.

Точки пересечения двух окружностей
Первая окружность
Вторая окружность

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

Сама по себе задача нахождения точек пересечения двух окружностей достаточно проста, однако предварительно надо проанализировать если ли вообще точки пересения у данных двух окружностей. Поэтому начать надо с вычисления расстояния d в декартовых координатах между центрами окружностей и сравнения его с радиусами окружностей r1 и r2.

При этом возможно следующие случаи (расстояние между центрами показано красным отрезком):

separate.png

contained.png

twopoints.png

twopoints2.png

onepoint.png

onepoint2.png

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

Two intersection pointsTwo intersection points

Сначала калькулятор находит отрезок a

Чтобы найти точку P3, калькулятор использует следующую формулу (в векторном виде):

И наконец, чтобы найти точки пересечения, калькулятор использует следующие уравнения:
Первая точка:

Обратите внимание на разные знаки перед вторым слагаемым

По теме также можно посмотреть следующие ссылки (на английском языке): Circle-Circle Intersection и Circles and spheres

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *