检查两个区域是否接触

时间:2013-02-02 14:18:02

标签: c# rectangles

  

可能重复:
  Finding the overlapping area of two rectangles (in C#)

我有两个区域由左上角和右下角确定(图1)。

在c#中,我如何测试他们是否接触过(图2)?

enter image description here

2 个答案:

答案 0 :(得分:28)

假设您有两个Rectangle r1r2,您可以检查它们是否相互交叉:

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

让我们注意:

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

当且仅当:

时才会有交集
(X2' >= X1 && X1' <= X2) && (Y2' >= Y1 && Y1' <= Y2)