2つの2Dベクトル(左上、右下)を使用して位置が定義されている2つの長方形がある場合、それらが交差している点を確認するにはどうすればよいですか?
4 に答える
両方の長方形が交差するかどうかのテストだけでなく、実際に交差の結果が必要だと思います。
rect1 =(l1、t1、r1、b1)とrect2 =(l2、t2、r2、b2)の交点も長方形です。
rectIntersection = ( max(l1, l2), max(t1, t2), min(r1, r2), min(b1, b2) )
left >= right || top >= bottom
長方形が左/上を含み、右/下を含むと仮定した場合、rectIntersectionはもちろん空です。
長方形が交差する場合
l1 < r2 && l2<r1 && t1<b2 && t2<t1
原点がleft-top
画面上にあると仮定します。
1つの長方形の左上が(x3,y3)
別の長方形の右下よりも小さいかどうかを確認すると(x2,y2)
、2つは交差しています。
ポイントはと(x2,|y2-y3|)
です(|x2-x3|,y2)
。
これは、rectangle1の右側にあるrectangle1とreactangle2用です。
左の平行移動に逆を適用します。
2つの長方形が重なっているのは、両方に共通の内部点X、Yが少なくとも1つあることです。最初のレクタブル{T1, L1, B1, R1}
を2番目{T2, L2, B2, R2}
(上、左、下、右)とします。これで、(X>L1)
and(X<R1)
と(Y>T1)
andに続き(Y<B1)
、長方形2についても同様になります。From(X>L1)
と(X<R2)
それはそれに続きます(L1<R2)
。同様に(L2<R1)
、、(T1<B2)
および(T2<B1)
。
したがって、これらの4つの条件が必要です。それらも十分であるかどうかは直接明らかではありませんが、それも事実です。
アルゴリズムを実装するよりも、ジョブを実行する関数に興味がある場合は、Windows でのIntersectRect 関数
を
確認してください。