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