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

직사각형의 정보(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

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

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.