e-olymp 4. Two circles

Задача взята с сайта e-olymp.com.

Условие

Определить количество точек пересечения двух окружностей.

Входные данные:

Шесть чисел: $x_1$, $y_1$, $r_1$, $x_2$, $y_2$, $r_2$, где $x_1$, $y_1$, $x_2$, $y_2$ — координаты центров окружностей, а $r_1$, $r_2$ — их радиусы. Все числа — действительные, не превышают $10^9$, заданы не более чем с тремя знаками после запятой.

Выходные данные:

Количество точек пересечения. Если точек пересечения бесконечно много, то вывести $-1$.

Тесты:

$X_1$ $Y_1$ $R_1$ $X_2$ $Y_2$ $R_2$ $N$
0 0 5 5 0 1 2
0 0 5 0 0 6 0
0 1 6 0 3 6 2

Код на Haxe:

Ход решения:

Высчитываем расстояние между центрами окружностей по формуле: $Range = \sqrt{(X_2-X_1)^2+(Y_2-Y_1)^2}$ (храниться и обрабатываться оно будет в квадрате). Вычисление в одну строку:

Далее рассчитываем сумму радиусов окружностей (также в квадрате).
Если центры совпадают ($Range = 0$) и длины радиусов равны, значит, совпадают и окружности:

Если расстояние между окружностями равно сумме радиусов, окружности имеют одну общую точку, касаясь друг друга снаружи. Также одна из окружностей может лежать внутри другой и касаться ее изнутри:

Если расстояние между окружностями превышает сумму радиусов, это значит, что они не пересекаются. Также одна окружность может лежать внутри другой, но не касаться ее:

В остальных случаях окружности пересекаются и имеют две общие точки:

Примечание: Входные данные для тестирования были заданы программно из-за определенных затруднений в использовании стандартного ввода в онлайн-среде try.haxe.org.

Ссылки:

Рабочий код для тестирования на try.haxe.org: Try Haxe !

Latest posts by Владислав Козачков (see all)

4 thoughts on “e-olymp 4. Two circles

  1. — х1 и прочие математические обозначения, то их нужно оформить через latex — $ x_{1}.
    — Вычисление квадратного корня выполняется с погрешностью, которая не позволит в ряде случаев (почти всегда) определить касание окружностей. Думаю, можно подобрать значения при которых пересекающиеся окружности будут определяться как не имеющие общих точек или наоборот. Слабые тесты на сайте e-olymp пропустит такое решение, но то что простительно на первом курсе уже не допустимо для профессионала. Почему не сравнивать квадраты?
    — «…затруднений при использовании стандартного ввода» Имеется в виду онлайн среда try.haxe.org? Тогда лучше это указать.

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