web-dev-qa-db-ja.com

2つの領域が接触しているかどうかを確認します

重複の可能性:
2つの長方形の重なり合う領域を見つける(C#で)

左上隅と右下隅で識別される2つの領域があります(図1)。

C#では、それらが接触しているかどうかをどのようにテストできますか(図2)?

enter image description here

16
A.Baudouin

r1r2の2つのRectangleがあるとしましょう。これにより、それらが互いに交差するかどうかを確認できます。

if(r1.IntersectsWith(r2))
{
    // Intersect
}

それらが互いに交差する正確な領域が必要な場合は、次のようにすることができます。

Rectangle intersectArea = Rectangle.Intersect(r1, r2);

ドキュメントを確認できます: Rectangle.IntersectsWithRectangle.Intersect


追加の重要な注意:

2つの長方形がエッジ上で互いに接触している場合、Rectangle.Intersectは1つの次元がゼロの長方形を返すことを確認しましたただしRectangle.IntersectsWithfalseを返します。したがって、注意する必要があります。

たとえば、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)
}
30
Alvin Wong

System.Drawingに依存したくない場合:

注意しましょう:

  • X1Y1X2Y2:最初の長方形の点の座標(X1 < X2およびY1 < Y2を含む)
  • X1'Y1'X2'Y2':2番目の長方形の点の座標(X1' < X2'およびY1' < Y2'を含む)

次の場合にのみ交差点があります。

(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)
12
Cédric Bignon