두 사각형의 겹침 판정(AABB)
- 사각형 A와 사각형 B가 있고, 각 사각형을 나타내는 x좌표와 y좌표가 두 개씩 주어질 때, 아래 경우 중 하나라도 해당하지 않으면 두 사각형은 겹치지 않는다.
- 사각형 A의 가장 작은 x좌표 < 사각형 B의 가장 작은 x좌표 < 사각형 A의 가장 큰 x좌표
- 사각형 A의 가장 작은 x좌표 < 사각형 B의 가장 큰 x좌표 < 사각형 A의 가장 큰 x좌표
- 사각형 A의 가장 작은 y좌표 < 사각형 B의 가장 작은 y좌표 < 사각형 A의 가장 큰 y좌표
- 사각형 A의 가장 작은 y좌표 < 사각형 B의 가장 큰 y좌표 < 사각형 A의 가장 큰 y좌표
예제 코드
#include <iostream>
#include <algorithm>
using namespace std;
struct Vector2
{
float x;
float y;
};
struct Rectangle
{
bool Intersect(Rectangle InRectangle)
{
if (!(this->Min.x < InRectangle.Min.x && InRectangle.Min.x < this->Max.x) &&
!(this->Min.x < InRectangle.Max.x && InRectangle.Max.x < this->Max.x) &&
!(this->Min.y < InRectangle.Min.y && InRectangle.Min.y < this->Max.y) &&
!(this->Min.y < InRectangle.Max.y && InRectangle.Max.y < this->Max.y))
return false;
else
return true;
}
Vector2 Min;
Vector2 Max;
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
Rectangle rec1;
rec1.Min.x = 10;
rec1.Min.y = 10;
rec1.Max.x = 20;
rec1.Max.y = 20;
Rectangle rec2;
rec2.Min.x = 15;
rec2.Min.y = 15;
rec2.Max.x = 30;
rec2.Max.y = 30;
if (rec1.Intersect(rec2))
cout << "두 사각형은 겹침.";
else
cout << "두 사각형은 겹치지 않음.";
}