可能重复:
查找两个矩形的重叠区域(在 C# 中)
我有两个由左上角和右下角标识的区域(图 1)。
在 c# 中,我如何测试他们是否有联系(图 2)?

假设您有两个Rectanglesr1和r2,您可以通过以下方式检查它们是否相互交叉:
if(r1.IntersectsWith(r2))
{
// Intersect
}
如果您需要它们彼此相交的确切区域,您可以这样做:
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
您可以查看文档:Rectangle.IntersectsWith,Rectangle.Intersect
额外的重要说明:
我刚刚检查过,如果两个矩形只是在边缘上相互接触,则Rectangle.Intersect返回一个一维为零的矩形,但是 Rectangle.IntersectsWith会返回false。所以你需要注意这一点。
例如,Rectangle.Intersecton{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)