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

Косяк при проверке пересечения прямоугольников - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать класс “Магазин” http://www.cyberforum.ru/cpp-beginners/thread289961.html
Создать класс “Магазин”, состоящей из класса ”Касса”. Класс “Магазин ”:название магазина, фамилия директора, колич. кассовых аппаратов. Класс “Касса”: фамилия кассира, выручка за день . •Найти...
C++ Способ инициализации полей класса Добрый день! Есть класс class Date { public: Date(int y = FIRST_YEAR, int m = 1, int d = 1); ~Date(); const Date& operator+=(const Date&); int operator-(const Date&); http://www.cyberforum.ru/cpp-beginners/thread289948.html
Нахождение элементов треугольника C++
Доброго всем времени суток, я к сожалению не силен в программировании но нужно решить данную задачу В треугольнике задано две стороны a,b b и угол между ними C. Найти и вывести все элементы...
"Число E" - не принимает решение C++
Ссылка на задачу: http://********/?main=task&id_task=46 Вот как я сделал: #include <iostream> #include <fstream> using namespace std; int main() { int namber =...
C++ Номерация строк http://www.cyberforum.ru/cpp-beginners/thread289934.html
как сделать что бы так, где на рисунке обведенно красным были номере строк кода а то не удобно искать ошибки
C++ Определить фирму, товар которой поступал чаще всего помогите рншить пожалуйста задачу: задание в атаче. спасибо подробнее

Показать сообщение отдельно
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579

Косяк при проверке пересечения прямоугольников - C++

06.05.2011, 17:51. Просмотров 591. Ответов 0
Метки (Все метки)

C++
1
2
3
4
5
6
7
8
9
struct point {int x; int y;};
struct rect{point a; point b;};
 
bool rectCross(rect p, rect q)
{
    bool onX=(p.a.x >=q.a.x && p.a.x <=q.b.x) || (p.b.x >=q.a.x && p.b.x <=q.b.x);
    bool onY=(p.a.y >=q.a.y && p.a.y <=q.b.y) || (p.b.y >=q.a.y && p.b.y <=q.b.y);
    return onX && onY;
}
Это функция, определяющая - пересекаются ли прямоугольники или нет. Истина - пересекаются, ложь - нет. Что-то мне подсказывает, что здесь не все корректно. Можете подсказать такие прямоугольники, на которых код загнется? Спасибо.

ЗЫ: по поводу структур - структура point думаю, ясна. Структура rect - прямоугольник, точки a и b - координаты левого нижнего угла и правого верхнего. Насчет того, что эти вершины не всегда могут быть левой нижней и правой верхней, написал такую функцию:
C++
1
2
3
4
5
6
7
rect correct(rect a)
{
    rect f;
    f.a.x=min(a.a.x, a.b.x); f.a.y=min(a.a.y, a.b.y);
    f.b.x=max(a.a.x, a.b.x); f.b.y=max(a.a.y, a.b.y);
    return f;
}
Может быть в ней ошибка?

Добавлено через 2 часа 46 минут
Вопрос снят. Код корректен, но при условии, что при сравнении прямоугольников прямоугольник p по оси oX лежит левее другого прямоугольника.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru