Другие языки программирования и технологии

Взываю к умным программистам и математикам!

Есть простая задачка. даны: две окружности с центрами в точках (x1; y1) и (x2; y2) с радиусами r1 и r2 найти: координаты точек их пересечения (c1; y1) и (c2; y2) интересует случай, когда таких точек две. было бы круто, если ответ дадите готовой формулой. если такой формулы нет, дайте хотя бы алгоритм нахождения этих точек, реализуемый программными методами.
Леонид
Леонид
1 525
Пусть нужно найти пару точек P3 пересечения, если они существуют.
Для начала найдем расстояние между центрами окружностей. d = || P1 - P0 ||. Если d > r0 + r1, тогда решений нет: круги лежат отдельно. Аналогично в случае d < || r0 - r1 || - тогда нет решений, так как одна окружность находится внутри другой.

Рассмотрим два треугольника P0P2P3 и P1P2P3. Имеем
a^2 + h^2 = r0^2 и b^2 + h^2 = r1^2
Используя равенство d = a + b, мы можем разрешить относительно a:
a = (r0^2 - r1^2 + d^2 ) / (2d)
В случае соприкосновения окружностей, это, очевидно, превратится в r0, так как: d = r0 + r1

Решим относительно h, подставив в первое уравнение h^2 = r0^2 - a^2
Итак,
P2 = P0 + a ( P1 - P0 ) / d
Таким образом, получаем координаты точек P3 = (c1, d1) и P3 = (c2, d2):
c1 = x2 + h ( y1 - y0 ) / d
c2 = x2 - h ( y1 - y0 ) / d
d1 = y2 - h ( x1 - x0 ) / d
d2 = y2 + h ( x1 - x0 ) / d
Н*
Никита ****
3 895
Лучший ответ
Леонид изящно) я побоялся системы квадратных уравнений, а зря) спасибо
Можно считать исходя из системы координат с началом в центре первой окружности. Либо, свести задачу к треугольникам образованным точками пересечения окружностей.
Уравнение, опиывающее график первой окружности: (X-X1)^2+(Y-Y1)^2=R1^2
Соответственно, вторая окружность описывается: (X-X2)^2+(Y-Y2)^2=R@^2

Решай систему этих двух уравнений. Решения и есть точки пересечения двух окружностей.
Zaynobidin Khalilov
Zaynobidin Khalilov
1 040
Леонид очень сложно решать в программе систему нелинейных уравнений) хотелось бы другое, более красивое решение, возможно применить тригонометрию