可能重复:
Finding the overlapping area of two rectangles (in C#)
我有两个区域由左上角和右下角确定(图1)。
在c#中,我如何测试他们是否接触过(图2)?
答案 0 :(得分:28)
假设您有两个Rectangle
r1
和r2
,您可以检查它们是否相互交叉:
if(r1.IntersectsWith(r2))
{
// Intersect
}
如果您需要彼此相交的确切区域,您可以这样做:
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
您可以查看文档:{{3}},Rectangle.IntersectsWith
其他重要提示:
我刚检查过,如果两个矩形在边缘上相互接触,Rectangle.Intersect
会返回一个矩形,其中一个维度为零,然而 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)
}
答案 1 :(得分:11)
如果您不想依赖System.Drawing
:
让我们注意:
X1
,Y1
,X2
,Y2
:第一个矩形点的坐标(X1 < X2
和Y1 < Y2
) X1'
,Y1'
,X2'
,Y2'
:第二个矩形点的坐标(X1' < X2'
和Y1' < Y2'
) 当且仅当:
时才会有交集(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)