เราทราบว่าสี่เหลี่ยมผืนผ้าสามารถแทนได้ด้วยสองพิกัด คือ มุมซ้ายบน (Top-left) และมุมขวาล่าง (Bottom-right) สมมติมีสี่เหลี่ยมสองรูป เราต้องตรวจสอบว่าสองรูปนี้ทับซ้อนกันหรือไม่ มีจุดพิกัดสี่จุด (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