アトリエ ぺっぺ

トップページ > プログラムTips > 矩形領域同士の重なりの判定

◆ 矩形領域同士の重なりの判定
矩形領域の重なりを判定するには、次のようにします。
 
■ 必要な情報:
  矩形1の最小点・最大点 ptMin1(xmn1, ymn1) ptMax1(xmx1, ymx1)
  矩形2の最小点・最大点 ptMin2(xmn2, ymn2) ptMax1(xmx2, ymx2)
    bool bCross = !(xmn1 > xmx2 || xmn1 > ymx2 || xmx1 < xmn2 || ymx1 < ymn2);
※ 解説
矩形領域が重なっている、というのは下のような状態ですね。

これを見ると、X・Y両成分について、必ずどちらかの最大・最小の頂点の値が、もう一方の最大・最小の頂点値の間に存在していないと、領域は重ならないのが分かるでしょうか。
 
逆に考えると、片方の最小値が、もう片方の最大値よりも大きい場所にある、もしくは最大値がもう片方の最小値よりも小さい場所にあると、その領域は重ならない、と言い換えることができます。

上の式では、上図の@とAを『満たさない』かどうかを判定しているわけですね。

(C) 2002 atelier-peppe
ababa@atelier-peppe.sakura.ne.jp