• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Приглашаем на KubanCTF

    Старт соревнований 14 сентября в 10:00 по москве

    Ссылка на регистрацию в соревнованиях Kuban CTF: kubanctf.ru

    Кодебай является технологическим партнером мероприятия

Окружность

  • Автор темы Guest
  • Дата начала
G

Guest

Нужно написать программу на языке С++ к задаче:

окружность на плоскости может быть задана координатами x,y ее центра и радиусом r.Пусть даны соответствующие характеристики нескольких окружностей:x1,y1,r1,x2,y2,r2.....xn,yn,rn.Определить,имеются ли среди этих окружностей три попарно пересекающихся.
 
W

Whatka

за тебя весь код никто писать не будет (тем более бесплатно)
определись что значит помощь в твоём понимании
 
W

Whatka

приблительно

берёшь первую окружность и смотришь пересекается ли с
другими окружностями
нет?-> вторую окружность и т.д.
да с одной?- > берёшь вторую окружность и т.д.
да с двумя и более?->cмотришь пересекаются ли между собой эти окружности

условие пересечения 2 окружностей - сумма радиусов меньше расстояния между центрами
 
G

Guest

В чем именно проблема? И что не объясняют на лекциях?

Как определить пересекаются ли окружности уже рассказали выше.

Если нужно организовать ввод данных, см. std::cin и std::cout (я так понимаю нужна консольная программа).

Все остальное, что нужно, это организовать цикл по всем заданным окружностям, про циклы можно прочитать в любой книжке по С++.
 
G

Guest

Моя логика при разработке была бы следующей:

1. С тремя переменными x, y и R не очень удобно работать. Лучше создать для окружности свой тип данных, например так:
C++:
struct Orc
{
double x;
double y;
double R;
};

2. Нужно как-то проверить пересекаются две окружности или нет. Пишем функцию
C++:
bool isCross(Orc a, Orc b)
{
double distance = std::sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
return (a.R + b.R) > distance;
}

(нужно еще добавить сюда проверку, что одна окружность не вложена во вторую без пересечения)

3. Пишем проверку попарного пересечения трех окружностей
C++:
bool isCross(Orc a, Orc b, Orc c)
{
return isCross(a, b) && isCross(b, c) && isCross(a, c);
}

4. Используем все что сделали)))

C++:
void main(void)
{
const int n = 5;
Orc orcs[n];

// заполнение массива окружностей

// проверка тройками окружностей на взаимное пересечение
for (int i = 0; i < n; i++)
for(int j = i + 1; j < n; j++)
for(int k = j + 1; k < n; k++)
if (isCross(orcs[i], orcs[j], orcs[k]))
{
//делаем, что нужно когда найдена тройка попарно пересекающихся окружностей
}
}
 
G

Guest

не запускает,пишет
1>c:\users\user\documents\visual studio 2008\projects\окружности\окружности\окружности.cpp(24) : error C2039: sqrt: не является членом "std"
 
G

Guest

Нужно подключить заголовочный файл cmath

По стандартным (namespace std) функциям можно смотреть .
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!