두 사각형이 겹치는지 확인하는 방법

조회수 5035회

직사각형의 정보(x-pos, y-pos, height, width)를 입력받아 사각형끼리 겹치는지를 판단하는 프로그램을 만들고 있습니다.

모든 input은 int형이고 사각형은 직사각형만 입력 받을거구요.

제 나름대로 만들어보려 했지만 잘 안됩니다. 어떻게 해야 하는지 간략하게 설명해주실 분 없나요

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
         RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top )
    

    혹은 Cartesion coordinate를 쓰면

    if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
        RectA.Y1 < RectB.Y2 && RectA.Y2 > RectB.Y1)
    

    로 검사해야 합니다.

    유형을 나눠 보면 Rect A, and Rect B에 대해 다음의 4가지 경우 중 하나라도 true이면 두 사각형은 겹칠 수 없습니다.

    • Cond1 - A의 왼쪽 모서리가 B의 오른쪽 모서리보다 오른쪽에 있음
    • Cond2 - A의 오른쪽 모서리가 B의 왼쪽 모서리보다 왼쪽에 있음
    • Cond3 - A의 위쪽 모서리가 B의 아래쪽 모서리보다 아래에 있음
    • Cond4 - A의 아래쪽 모서리가 B의 위쪽 모서리보다 위에 있음

    (Cond1 Or Cond2 Or Cond3 Or Cond4) == true면 두 사각형은 절대 겹칠 수 없으며 False이면 겹치는 경우.

    이를 수식으로 표현하면

    • Cond1 - RectA.Left > RectB.Right
    • Cond2 - RectA.Right < RectB.Left
    • Cond3 - RectA.Top < RectB.Bottom
    • Cond4 - RectA.Bottom > RectB.Top

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.