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

C で 2 つの長方形が重なっているかどうかを効率的に判断するにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2024-12-23 22:52:12
オリジナル
236 人が閲覧しました

How Can We Efficiently Determine if Two Rectangles Overlap in C  ?

重なり合う四角形の決定

コンピューター グラフィックスおよび空間データ処理の領域では、2 つの四角形が重なり合っているかどうかを決定するのは一般的なタスクです。これは、衝突の検出、オブジェクトの位置合わせ、または幾何学的操作の実行に非常に重要です。

C では、この問題を解決するための一般的なアプローチには、境界ボックスの概念を利用することが含まれます。境界ボックスは、別の形状内のすべての点を囲む最小の長方形を表します。 2 つの四角形の境界ボックスを比較することで、重複があるかどうかを判断できます。

境界ボックスのチェック

指定したコード スニペットは、境界を実装しようとします。ベクトル演算を使用したボックスアプローチ。長方形 1 上の点、長方形 2 上のテスト ポイントの回転エッジを計算し、それらの内積の値を決定します。ドット積の値は、2 つの点が回転されたエッジの反対側にあるかどうかを判断するために使用され、重複の可能性を示します。

ただし、提供されたコードにはいくつかの不正確さがあります。代わりに、次の簡略化されたコードを使用して、境界ボックスを使用して重複をチェックできます。

bool isOverlap(Rectangle a, Rectangle b) {
  bool overlapX = (a.left < b.right && a.right > b.left);
  bool overlapY = (a.top > b.bottom && a.bottom < b.top);
  return overlapX && overlapY;
}
ログイン後にコピー

このコードは、2 つの四角形の左、右、上、下の境界を比較して、それらが交差しているかどうかを判断します。 X 軸と Y 軸の両方に重なりがある場合、長方形は重なり合います。

デカルト座標の使用

あるいは、デカルト座標 (X1、Y1) を使用している場合は、長方形の左と上の座標、および右と下の座標を表す (X2, Y2)、次の式を使用できます。

bool isOverlap(Rectangle a, Rectangle b) {
  bool overlapX = (a.X1 < b.X2 && a.X2 > b.X1);
  bool overlapY = (a.Y1 > b.Y2 && a.Y2 < b.Y1);
  return overlapX && overlapY;
}
ログイン後にコピー

境界ボックスまたはデカルト座標を利用すると、2 つの長方形が重なっているかどうかを効率的に判断でき、複雑な幾何学的操作や空間推論を正確に実行できます。

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

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