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

Вызов функции проверки - C++

Восстановить пароль Регистрация
 
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
11.11.2013, 21:46     Вызов функции проверки #1
Доброго времени суток!
2-ой день мучаюсь с задачей. Есть массив прямоугольников, вершины которых я считал с файла. Задача состоит в том, чтобы проверить пересекаются ли они. Сделал соответствующую функцию :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool Intersects(Rect Obj1, Rect Obj2)
{
    int ax,ay,ax1,ay1,bx,by,bx1,by1;
 
    ax = Obj1.ItsUpperLeftGetX();
    ay = Obj1.ItsUpperLeftGetY();
    ax1 = Obj1.ItsLowerRightGetX();
    ay1 = Obj1.ItsLowerRightGetY();
 
    bx = Obj2.ItsUpperLeftGetX();
    by = Obj2.ItsUpperLeftGetY();
    bx1 = Obj2.ItsLowerRightGetX();
    by1 = Obj2.ItsLowerRightGetY();
 
    if ((ay1>by) || (ay<by1) || (ax>bx1) || (ax1<bx)) return false; // условие что они не пересекаются 
    else return true;
}
Вызываю ее здесь:
C++
1
2
3
4
5
for (int i = 0; i<k; i++) // k  - количество элементов массива
        for (int j = 0; j<k; j++)
        {
            if (Intersects(MyRect[j],MyRect[j+1])) { MyRect[j].Draw(dc); MyRect[j+1].Draw(dc); }
        }
Рисует весь массив прямоугольников, хотя по идее должно только те, что пересекаются. В чем ошибка? Благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 21:46     Вызов функции проверки
Посмотрите здесь:

C++ Вызов функции
C++ Вызов функции.
C++ Вызов функции
Вызов функции C++
C++ Вызов функции в C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
11.11.2013, 22:29     Вызов функции проверки #2
nedsi, такая проверка точно не даст результат.

Честно говоря, и сам не знаю как бы лучше сделать. Единственное, что приходит на ум, так это проверять вхождение каждой вершины одного прямоугольника в другом:
C++
1
2
3
4
5
if(((ay<by)&&(ay1>by))&&((ax<bx)&&(ax2>bx))) return true; //проверка вхождения левой верхней вершины
if(((ay<by1)&&(ay1>by1))&&((ax<bx)&&(ax2>bx))) return true;// левой нижней вершины
if(((ay<by1)&&(ay1>by1))&&((ax<bx1)&&(ax2>bx1))) return true;//правой нижней вершины
if(((ay<by)&&(ay1>by))&&((ax<bx1)&&(ax2>bx1))) return true;//правой верхней вершины
return false;//если не сработал ни один if, то прямоугольники не накладываются
nedsi
2 / 2 / 0
Регистрация: 18.09.2013
Сообщений: 65
11.11.2013, 22:51  [ТС]     Вызов функции проверки #3
RQdan, Вы даже не представляете как выручили! Я 2 дня мучался с этой функцией! Удачи Вам и еще раз спасибо ОГРОМНОЕ!

Добавлено через 3 минуты
и да, там маленькая опечатка где ax2 -> ax1. Все прекрасно работает
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
11.11.2013, 23:16     Вызов функции проверки #4
nedsi, всегда пожалуйста
Yandex
Объявления
11.11.2013, 23:16     Вызов функции проверки
Ответ Создать тему
Опции темы

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