ホームページ > バックエンド開発 > C++ > 2 つの長方形が重なっているかどうかをどのように判断しますか?

2 つの長方形が重なっているかどうかをどのように判断しますか?

Mary-Kate Olsen
リリース: 2024-12-23 04:08:25
オリジナル
956 人が閲覧しました

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)
ログイン後にコピー

証明矛盾:

この条件は矛盾による証明の原則に基づいています。次の条件のいずれかが true の場合、長方形は重なり合うことができません:

  • 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 軸に平行であることを前提としています。
  • 1 つのピクセルのオーバーラップを許可するには、< を変更します。そして>
  • このアルゴリズムは、さまざまな座標系に合わせて簡単に調整できます (たとえば、Y が上から下に増加する場合など)。

以上が2 つの長方形が重なっているかどうかをどのように判断しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート