首頁 > 後端開發 > C++ > 我們如何有效地確定兩個矩形是否重疊?

我們如何有效地確定兩個矩形是否重疊?

DDD
發布: 2024-12-26 21:03:14
原創
806 人瀏覽過

How Can We Efficiently Determine if Two Rectangles Overlap?

重疊矩形:綜合分析

確定兩個矩形在二維平面中是否重疊是電腦圖形學和計算中的一個基本問題幾何學。在本文中,我們將探索一種有效的演算法來解決這個問題。

重疊的條件

兩個矩形A 和B 重疊當且僅當四個條件滿足:

  • A 的左邊緣位於B 右邊緣的左側: RectA.Left
  • A 的右邊緣位於 B左邊緣的右側: RectA.Right > RectB.Left
  • A 的上緣位於B 的下緣之上: RectA.Top > RectB.Bottom
  • A 的底邊低於B 的頂邊: RectA.Bottom
  • A 的底邊低於B 的頂邊: 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 <iostream>

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板