r1
とr2
の2つのRectangle
があるとしましょう。これにより、それらが互いに交差するかどうかを確認できます。
if(r1.IntersectsWith(r2))
{
// Intersect
}
それらが互いに交差する正確な領域が必要な場合は、次のようにすることができます。
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
ドキュメントを確認できます: Rectangle.IntersectsWith
、 Rectangle.Intersect
追加の重要な注意:
2つの長方形がエッジ上で互いに接触している場合、Rectangle.Intersect
は1つの次元がゼロの長方形を返すことを確認しましたただしRectangle.IntersectsWith
はfalse
を返します。したがって、注意する必要があります。
たとえば、Rectangle.Intersect
および{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'
、Y1'
、X2'
、Y2'
:2番目の長方形の点の座標(X1' < X2'
およびY1' < Y2'
を含む)次の場合にのみ交差点があります。
(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)