Top.Mail.Ru
Ответы
Аватар пользователя
12лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

C++ пересечение 2-х окружностей

Даны данные 2-х окружностей, x1, y1,r1, x2, y2, r2 - x,y - координаты точек центра окружности, r - радиус окружности.

Требуется определить пересекаются ли эти окружности.

Я делаю так: Определяю длину от точки центра первой окружности до второй, и если эта длину больше чем сумма радиуса первой и второй окружности значет не пересекаются.

int x1, y1,r1, x2, y2, r2;
...
bool q = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)) > (r1 + r2);

Правильно получится решение или нет?

По дате
По рейтингу
Аватар пользователя
Новичок
12лет

Правильно, но:
а) размеры не обязательно должны быть целыми.
б) гораздо быстрее и эффективнее проверять
(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1) > (r1+r2)*(r1+r2)
Умножение выполняется гораздо быстрее, чем извлечение корня и возведение в произвольную степень.

Аватар пользователя
Просветленный
12лет

Ну конечно, это же так просто! Только приведение к типу double для аргумента pow нужно делать.

Аватар пользователя
Мыслитель
12лет

Да, правильно.
Если вам нужны точки пересечения, то их можно посчитать из системы или настроить треугольников.