>백엔드 개발 >C++ >두 개의 직사각형이 겹치는지 어떻게 확인합니까?

두 개의 직사각형이 겹치는지 어떻게 확인합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-23 04:08:25960검색

How Do You Determine if Two Rectangles Overlap?

직사각형 사이의 겹침 결정:

직사각형 사이의 겹침을 결정하는 초기 접근 방식은 링크된 알고리즘과 다른 알고리즘을 기반으로 하는 것으로 보입니다. 질문. 제공된 알고리즘은 아래와 같이 직사각형 좌표의 보다 간단한 비교를 사용합니다.

if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
    RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top) 

 // Assuming Left, Right, Top and Bottom are the coordinates of the rectangles along the X and Y axis

직교 좌표에서 이 조건은 다음과 같이 표현될 수 있습니다.

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

증명 모순:

이 조건은 모순에 의한 증명의 원칙에 기초합니다. 다음 조건 중 하나라도 충족되면 직사각형은 겹칠 수 없습니다.

  • RectA의 왼쪽 가장자리는 RectB의 오른쪽 가장자리의 오른쪽에 있습니다(RectA는 RectB의 완전히 오른쪽에 있습니다)
  • RectA의 오른쪽 가장자리는 RectB의 왼쪽 가장자리 왼쪽에 있습니다(RectA는 RectB의 왼쪽 가장자리에 완전히 있습니다). RectB)
  • RectA의 위쪽 가장자리는 RectB의 아래쪽 가장자리 아래에 있습니다(RectA는 RectB의 완전히 아래에 있습니다)
  • RectA의 아래쪽 가장자리는 RectB의 위쪽 가장자리 위에 있습니다(RectA는 RectB의 완전히 위에 있습니다)

그러므로 중첩 조건은 이들과 반대입니다. 조건:

  • RectA의 왼쪽 가장자리가 RectB의 오른쪽 가장자리의 왼쪽에 있습니다.
  • RectA의 오른쪽 가장자리가 RectB의 왼쪽 가장자리의 오른쪽에 있습니다.
  • RectA의 위쪽 가장자리가 위에 있습니다. RectB의 아래쪽 가장자리
  • RectA의 아래쪽 가장자리는 RectB 상단 가장자리 아래

추가 참고 사항:

  • 이 알고리즘은 직사각형이 X 및 Y 축에 평행하다고 가정합니다.
  • 한 픽셀의 겹침을 허용하려면 < > 연산자를 관련 경계에서 <= 및 >=로 변환합니다.
  • 알고리즘은 다양한 좌표계에 맞게 쉽게 조정할 수 있습니다(예: Y가 위에서 아래로 증가하는 경우).
  • 위 내용은 두 개의 직사각형이 겹치는지 어떻게 확인합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.