20

可能重复:
查找两个矩形的重叠区域(在 C# 中)

我有两个由左上角和右下角标识的区域(图 1)。

在 c# 中,我如何测试他们是否有联系(图 2)?

在此处输入图像描述

4

2 回答 2

34

假设您有两个Rectanglesr1r2,您可以通过以下方式检查它们是否相互交叉:

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)
}
于 2013-02-02T14:24:21.690 回答
18

如果您不想依赖System.Drawing

让我们注意:

  • X1, Y1, X2, Y2: 第一个矩形的点的坐标(用X1 < X2Y1 < Y2
  • X1', Y1', X2', Y2': 第二个矩形的点的坐标(用X1' < X2'Y1' < Y2'

当且仅当:

(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)
于 2013-02-02T14:21:55.180 回答