矩形領域の重なりを判定するには、次のようにします。
■ 必要な情報:
矩形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を『満たさない』かどうかを判定しているわけですね。
|