Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2018, 11:56   #1
DowL_HH4
Пользователь
 
Регистрация: 23.03.2018
Сообщений: 10
По умолчанию цикл в цикле. не могу разобраться с задачей.

Приветствую, уважаемые форумчане. Никак не могу разобраться с числами в данной задаче: На плоскости находятся две фигуры. Одна фигура будет фиксирована и это будет многоугольник, другая фигура – круг, будет меняться.
Программа должна запрашивать координаты центра (x, y) и радиус r круга.
-10000< x, y, r<10000
Требуется вычислить количество точек пересечения этих фигур, координаты которых целые числа.
Квадрат. Стороны квадрата параллельны осям координат.
Сторона 200. Верхний угол (300, 400)
Вот все что имею. Надеюсь сможете растолковать и объяснить что надо исправить и как. Спасибо.
Код:
#include <iostream>
#include <math.h>
using namespace std;

int main () {
double x1, y1;
int x, y, r, t;
cout<<"input x: "; cin>>x;
cout<<"input y: "; cin>>y;
cout<<"Input radius: "; cin>>r;
t=0;
for (x1=(300+200*sqrt(2.0)); x1<=(400-sqrt(2.0)); x1++){
for (y1=(400-200*sqrt(2.0)); y1<=400; y1++){
if ((((y1-y)*(y1-y)+(x1-x)*(x1-x))<=r*r) && (y1<=x1) && (y1<=(-x1)+800) && (y1>=x1-800/sqrt(2.0)) && (y1>=(-x1)+800-800/sqrt(2.0))){
t=t+1;
}
}
}
cout<<t <<endl;
return 0;
}
DowL_HH4 вне форума Ответить с цитированием
Старый 23.03.2018, 13:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А зачем эти дикие циклы? У тебя есть координаты нескольких отрезков и окружности. Дальше везде под расстоянием имеется в виду расстояние от центра окружности. Расстояние до отрезка - расстояние до прямой на которой отрезок лежит.

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

Последний раз редактировалось Аватар; 23.03.2018 в 13:39.
Аватар вне форума Ответить с цитированием
Старый 23.03.2018, 13:47   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У тебя есть координаты нескольких отрезков и окружности.
Вы путаете круг и окружность. И квадрат тут, вероятно, имеется в виду плоская фигура, а не контур.

пересечений у двух плоских фигур может быть бесконечно много.
поэтому и нужно выделить только те, что имеют целочисленные координаты.

пример-иллюстрацию набросать или я достаточно понятно объяснил своё имхо?

я бы написал что-то вроде
Код:
int k=0;
int xk=300, yk=400, a=200;
for(int xc=xk; xc<=xk+a; xc++)
  for(int yc=yk; yc>=yk-a; yc--)
    if ((xc-x)*(xc-x) + (yc-y)*(yc-y) <= r*r) k++;

Последний раз редактировалось Serge_Bliznykov; 23.03.2018 в 13:54.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.03.2018, 13:53   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Скорее всего так и есть, не правильно понял. Тогда сравнивать квадрат расстояния от всех целочисленных точек прямоугольника до центра окружности с квадратом радиуса. Если произвольный многоугольник, то существенно усложнится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2018, 13:56   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Тогда сравнивать квадрат расстояния от всех целочисленных точек прямоугольника до центра окружности с квадратом радиуса.
точно так. согласен. выше набросал эскиз кода.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ не могу разобраться в цикле! Iskander_1 Помощь студентам 7 09.08.2011 11:52
Опять не могу разобраться с задачей biowoooooolf Паскаль, Turbo Pascal, PascalABC.NET 3 11.03.2011 13:02
не могу разобраться с задачей Sagara2_kis7 Помощь студентам 18 28.02.2011 18:56
не могу разобраться с задачей MAX722 Microsoft Office Excel 9 23.02.2011 13:11