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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 578
#1

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

06.05.2011, 17:51. Просмотров 599. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 17:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Косяк при проверке пересечения прямоугольников (C++):

Площадь пересечения прямоугольников - C++
Здравствуйте. Мне нужно найти площадь пересечения двух прямоугольников, если известны координаты данных прямоугольников. Стороны одного...

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

Найти площадь пересечения прямоугольников - C++
даны 2 прямоугольника. Каждый из них задан 2 точками. верхней левой и правой нижней. если они пресекаются найди их площадь... Задавать надо...

Координаты пересечения двух прямоугольников - C++
здравствуйте. сегодня наткнулся на такую задачу: определить координаты левого верхнего и правого нижнего углов общей части 2-х...

Площадь пересечения двух прямоугольников - C++
Даны 4 координаты: 2 из них - координаты противоположных вершин первого прямоугольника (не известно каких) и оставшиеся две -...

Нахождение площадей пересечения случайных прямоугольников - C++
Предположим у меня есть некоторое количество прямоугольников (точек x;y которые образуют прямоугольники, а так же точки пересечения...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 17:51
Привет! Вот еще темы с ответами:

Последовательно вводятся габариты n прямоугольников. Определить площадь их пересечения. - C++
Площади прямоугольников. Прямоугольник на плоскости a&lt;=x&lt;=b; c&lt;=y&lt;=d задается четырьмя числами (его габаритами): a,b,c,d. Последовательно...

Найти площадь пересечения, то есть общую часть двух прямоугольников (не могу понять алгоритм решения) - C++
Помогите пожалуйста, не могу понять алгоритм решения задачи: Напишите программу, которая находит площадь пересечения, то есть общей...

Последовательно вводятся габариты n прямоугольников. В процессе ввода находить площадь их пересечения, не запоминая самих габаритов. - C++
Площади прямоугольников. Прямоугольник на плоскости a&lt;=x&lt;=b; c&lt;=y&lt;=d задается четырьмя числами (его габаритами): a,b,c,d. Последовательно...

Вывести расстояние от заданной точки до точки пересечения диагоналей прямоугольников - C++
Прямоугольники заданы координатами их вершин. 1)Вывести расстояние от заданной точки до точки пересечения диагоналей. 2) Вывести...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.