직사각형은 두 좌표, 즉 왼쪽 위 모서리와 오른쪽 아래 모서리를 사용하여 나타낼 수 있다는 것을 알고 있습니다. 두 개의 직사각형이 있다고 가정하고 이 두 개의 중첩 여부를 확인해야 합니다. 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