> 백엔드 개발 > C++ > 두 개의 직사각형이 겹치는지 어떻게 효율적으로 판단할 수 있나요?

두 개의 직사각형이 겹치는지 어떻게 효율적으로 판단할 수 있나요?

DDD
풀어 주다: 2024-12-26 21:03:14
원래의
806명이 탐색했습니다.

How Can We Efficiently Determine if Two Rectangles Overlap?

겹치는 직사각형: 종합 분석

2차원 평면에서 두 개의 직사각형이 겹치는지 여부를 결정하는 것은 컴퓨터 그래픽 및 전산학 분야의 근본적인 문제입니다. 기하학. 이 기사에서는 이 문제를 해결하기 위한 효율적인 알고리즘을 살펴보겠습니다.

겹침 조건

두 개의 직사각형 A와 B가 4개의 조건이 겹치는 경우에만 해당 충족됨:

  • A의 왼쪽 가장자리가 B의 오른쪽 가장자리의 왼쪽에 있습니다: RectA.Left < RectB.Right
  • A의 오른쪽 가장자리는 B의 왼쪽 가장자리의 오른쪽에 있습니다. RectA.Right > RectB.Left
  • A의 위쪽 가장자리가 B의 아래쪽 가장자리 위에 있습니다. RectA.Top > RectB.Bottom
  • A의 아래쪽 가장자리는 B의 위쪽 가장자리 아래에 있습니다. RectA.Bottom < RectB.Top

알고리즘

이러한 조건을 기반으로 중복을 확인하는 알고리즘을 구성할 수 있습니다.

def check_overlap(RectA, RectB):
  return RectA.Left < RectB.Right and \
         RectA.Right > RectB.Left and \
         RectA.Top > RectB.Bottom and \
         RectA.Bottom < RectB.Top
로그인 후 복사

구현

C에서 코드를 사용하면 다음과 같이 이 알고리즘을 구현할 수 있습니다.

#include 

class Rectangle {
public:
  int left, right, top, bottom;
};

bool check_overlap(Rectangle rect1, Rectangle rect2) {
  return rect1.left < rect2.right && \
         rect1.right > rect2.left && \
         rect1.top > rect2.bottom && \
         rect1.bottom < rect2.top ;
}

int main() {
  Rectangle rect1, rect2;
  std::cout << "Enter the coordinates of Rectangle 1 (left, right, top, bottom): ";
  std::cin >> rect1.left >> rect1.right >> rect1.top >> rect1.bottom;

  std::cout << "Enter the coordinates of Rectangle 2 (left, right, top, bottom): ";
  std::cin >> rect2.left >> rect2.right >> rect2.top >> rect2.bottom;

  if (check_overlap(rect1, rect2)) {
    std::cout << "The rectangles overlap." << std::endl;
  } else {
    std::cout << "The rectangles do not overlap." << std::endl;
  }

  return 0;
}

이 구현에서는 사용자에게 두 직사각형의 좌표를 입력하라는 메시지를 표시하고 앞서 언급한 조건에 따라 겹치는 부분을 확인합니다.

위 내용은 두 개의 직사각형이 겹치는지 어떻게 효율적으로 판단할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿