Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าสี่เหลี่ยมสองรูปทับซ้อนกันหรือไม่ด้วย C++

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