Я пытаюсь понять, почему программа продолжает выводить Rectangles Do Not Overlap
независимо от вида введенных значений int.
Я пытался исправить свои операторы if
в функции isRectangleOverlap()
, но все еще дляпо какой-то причине выходные данные остаются прежними.
Прямоугольник представлен в виде списка [x1, y1, x2, y2], где (x1, y1) - координаты его нижнего левого угла, и (x2, y2) - координаты его верхнего правого угла.
Не выводятся следующие примеры:
Пример 1: Ввод: rec1 = [0,0,2,2],rec2 = [1,1,3,3] Выход: перекрытие прямоугольников
Пример 2: Вход: rec1 = [0,0,1,1], rec2 = [1,0,2,1] Выход: Прямоугольники не перекрываются
Для ясности, два прямоугольника, которые касаются только угла или краев, не перекрываются.
#include <iostream>
#include <vector>
using namespace std;
struct Point{
int x, y;
};
bool isRectangleOverlap(Point t1, Point b1, Point t2, Point b2){
if ((t1.x <= t2.x && b2.x <= b1.x) && (t1.y >= t2.y && b2.y >= b1.y)) {
return true;
}
else if ((t2.x <= t1.x && b1.x <= b2.x) && (t2.y >= t1.y && b1.y >= b2.y)) {
return true;
}
else {
return false;
}
}
int main() {
Point top1, top2, bottom1, bottom2;
cout << "First Top Point: ";
cin >> top1.x;
cin >> top1.y;
cout << endl;
cout << "First Bottom Point: ";
cin >> bottom1.x;
cin >> bottom1.y;
cout << endl;
cout << "Second Top Point: ";
cin >> top2.x;
cin >> top2.y;
cout << endl;
cout << "Second Bottom Point: ";
cin >> bottom2.x;
cin >> bottom2.y;
cout << endl;
if (isRectangleOverlap(top1, bottom1, top2, bottom2)){
cout << "Rectangles Overlap" << endl;
}
else
{
cout << "Rectangles Do Not Overlap" << endl;
};
return 0;
}
Я ожидал, что результат будет таким, как указано в примере выше.