[UNSEEN] 테스트 대비 9. 두 사각형의 겹침 판정

Doorbals·2023년 2월 23일
0

UNSEEN

목록 보기
9/10

두 사각형의 겹침 판정(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;		// 가장 작은 x좌표와 y좌표
	Vector2 Max;		// 가장 큰 x좌표와 y좌표
};


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 << "두 사각형은 겹치지 않음.";
}
profile
게임 클라이언트 개발자 지망생의 TIL

0개의 댓글