重複の可能性:
2つの長方形の重複領域を見つける(C#で)
左上隅と右下隅で識別される2つの領域があります(図1)。
C#では、それらが接触しているかどうかをどのようにテストできますか(図2)?
Rectangle
とである2つのsがあるr1
としましょうr2
。これにより、それらが互いに交差するかどうかを確認できます。
if(r1.IntersectsWith(r2))
{
// Intersect
}
それらが互いに交差する正確な領域が必要な場合は、次のようにすることができます。
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
ドキュメントを確認できます:Rectangle.IntersectsWith
、Rectangle.Intersect
追加の重要な注意:
2つの長方形がエッジで互いに接触している場合、Rectangle.Intersect
1つの次元がゼロである長方形を返しますが、を Rectangle.IntersectsWith
返しますfalse
。したがって、注意する必要があります。
たとえば、Rectangle.Intersect
on{X=0,Y=0,Width=10,Height=10}
と{X=10,Y=0,Width=10,Height=10}
はを返し{X=10,Y=0,Width=0,Height=10}
ます。
true
接触しただけでも取得したい場合は、条件を次のように変更します。
if(Rectangle.Intersect(r1, r2) != Rectangle.Empty)
{
// Intersect or contact (just touch each other)
}
依存したくない場合System.Drawing
:
注意しましょう:
X1
、、、 :最初Y1
の長方形の点の座標X2
(および)Y2
X1 < X2
Y1 < Y2
X1'
、、、 :2番目Y1'
の長方形の点の座標X2'
(および)Y2'
X1' < X2'
Y1' < Y2'
次の場合にのみ交差点があります。
(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)