Форум программистов, компьютерный форум, киберфорум
Наши страницы

Проверить, пересекаются ли две окружности - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Для вывода знаков зодиака http://www.cyberforum.ru/cpp-beginners/thread1492264.html
16.Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствие один из знаков Зодиака. Написать программу, которая в зависимости от даты рождения печатает название...
C++ Как сделать из двух чисел третье, уникальное для любой комбинации первых двух? Hi :) Есть два числа, допустим: int a и int b, как можно их "сопряч", то есть что - то с ними сделать, что бы получить третье число, уникальное для любого набора этих А и B. Причём порядок... http://www.cyberforum.ru/cpp-beginners/thread1492253.html
C++ Создать окно с кнопкой, закрывающей это окно
Создайте новый оконный проект в ОС Microsoft Windows 7 или Linux. Разместите посередине окна кнопку с надписью "Close". После нажатия кнопки окно должен закрываться. Работа программы должно...
Массив, индекс как уникальный ID C++
Добрый день. Пытаюсь сделать список, который хранит в себе список всех обьектов. У этого списка есть поле - ID. По идеи оно должно быть уникальным. Но вот вопрос. При создании массива, стоит ли...
C++ Настройка Clion + OpenCV http://www.cyberforum.ru/cpp-beginners/thread1492181.html
Уважаемые, форумчане...беда!) Установил свеженькую среду Clione под виндой и теперь никак не могу разобраться как грамотно подключить OpenCV. Скачал exe установщик. Он все распаковал и...
C++ Важность очередности при подключении библиотеки GL/glut.h Всем привет. Пытаюсь вывести в заголовок угол поворота фигуры а он выдает вот такую ошибку: 1>------ Построение начато: проект: рисуем, Конфигурация: Debug Win32 ------ 1> рисунок.cpp... подробнее

Показать сообщение отдельно
Melvil
48 / 47 / 13
Регистрация: 20.05.2015
Сообщений: 251
03.07.2015, 14:35  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Если они на плоскости, то координаты измеряем в метрах.
Почему не может быть окружности радиусом в полтора метра?
В условии сказано, что координаты - это целые числа:

координаты ее центра x и y (целые числа, по модулю не превосходящие 5000) и радиус (целое число 1 ≤ r ≤ 1000).
И всё же, если брать и целые и дробные числа, программа не проходит проверки:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
void main()
{
    double x1, y1, x2, y2, r1, r2, d;
    cin >> x1 >> y1 >> r1;
    cin >> x2 >> y2 >> r2;
    d = ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    if ((r1 + r2)*(r1 + r2) >= d)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}
Добавлено через 28 минут
Решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
void main()
{
    double x1, y1, x2, y2, r1, r2, d;
    cin >> x1 >> y1 >> r1;
    cin >> x2 >> y2 >> r2;
    d = ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    if ((r1 + r2)*(r1 + r2) >= d && d + r1 > r2 && d + r2 > r1 )
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}

ля начала определимся с тем, что нам известны радиусы окружностей и они равны r1 и r2. Так же по формуле расстояния между точками мы можем вычислить расстояние между центрами данных окружностей:

r = sqrt( (x2-x1)2 + (y2-y1)2 )

Заметим так же, что окружности будут пересекаться тогда и только тогда, когда возможен треугольник со сторонами r1, r2 и r. Фигуру, две стороны которой лежат на третьей или одна из сторон имеет нулевую длину так же будем считать треугольником, т.к. окружности могут друг друга касаться(r=r1+r2), либо полностью совпадать (r=0).

Треугольник считается возможным если сумма двух любых его сторон не меньше третьей. Т.е. в нашем случае достаточно проверить, что r1+r2>=r и r+r2>=r1 и r+r1>=r2. При этом желательно использовать вещественные типы данных. Так же можно провести аккуратное сравнение с учетом возможных погрешностей при вычислениях.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru