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


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

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

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

  • 2016년 01월 11일에 작성됨

조회수 717


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
  • 2016년 01월 11일에 작성됨


  • 2016년 02월 03일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close