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

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

Восстановить пароль Регистрация
 
Veyron
 Аватар для Veyron
104 / 104 / 4
Регистрация: 02.06.2009
Сообщений: 579
06.05.2011, 17:51     Косяк при проверке пересечения прямоугольников #1
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 лежит левее другого прямоугольника.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 17:51     Косяк при проверке пересечения прямоугольников
Посмотрите здесь:

C++ Найти площадь пересечения прямоугольников
C++ Последовательно вводятся габариты n прямоугольников. В процессе ввода находить площадь их пересечения, не запоминая самих габаритов.
C++ Последовательно вводятся габариты n прямоугольников. Определить площадь их пересечения.
Нахождение площадей пересечения случайных прямоугольников C++
координаты пересечения двух прямоугольников C++
Площадь пересечения двух прямоугольников C++
C++ Площадь пересечения двух прямоугольников
Площадь пересечения прямоугольников C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru