可能重复:
查找两个矩形的重叠区域(在 C# 中)
我有两个由左上角和右下角标识的区域(图 1)。
在 c# 中,我如何测试他们是否有联系(图 2)?
假设您有两个Rectangle
sr1
和r2
,您可以通过以下方式检查它们是否相互交叉:
if(r1.IntersectsWith(r2))
{
// Intersect
}
如果您需要它们彼此相交的确切区域,您可以这样做:
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
您可以查看文档:Rectangle.IntersectsWith
,Rectangle.Intersect
额外的重要说明:
我刚刚检查过,如果两个矩形只是在边缘上相互接触,则Rectangle.Intersect
返回一个一维为零的矩形,但是 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'
, Y1'
, X2'
, Y2'
: 第二个矩形的点的坐标(用X1' < X2'
和Y1' < Y2'
)当且仅当:
(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)