직사각형은 두 좌표, 즉 왼쪽 위 모서리와 오른쪽 아래 모서리를 사용하여 나타낼 수 있다는 것을 알고 있습니다. 두 개의 직사각형이 있다고 가정하고 이 두 개의 중첩 여부를 확인해야 합니다. 4개의 좌표점(l1, r1)과 (l2, r2)가 있습니다.
- l1은 첫 번째 직사각형의 왼쪽 상단 모서리입니다.
- r1은 첫 번째 직사각형의 오른쪽 하단 모서리입니다.
- l2는 두 번째 직사각형의 왼쪽 상단 모서리입니다.
- r2는 두 번째 직사각형의 오른쪽 하단 모서리입니다.
직사각형이 좌표축에 평행하다고 가정했습니다. 이를 해결하기 위해서는 몇 가지 조건을 확인해야 합니다.
- 한 직사각형이 다른 직사각형의 상단 가장자리 위에 있습니다.
- 한 직사각형은 다른 직사각형의 왼쪽 가장자리 왼쪽에 있습니다.
예시
#include<iostream>
using namespace std;
class Point {
public:
int x, y;
};
bool isOverlapping(Point l1, Point r1, Point l2, Point r2) {
if (l1.x > r2.x || l2.x > r1.x)
return false;
if (l1.y < r2.y || l2.y < r1.y)
return false;
return true;
}
int main() {
Point l1 = {0, 10}, r1 = {10, 0};
Point l2 = {5, 5}, r2 = {15, 0};
if (isOverlapping(l1, r1, l2, r2))
cout << "Rectangles are Overlapping";
else
cout << "Rectangles are not Overlapping";
} 출력
Rectangles are Overlapping