检查两个区域是否接触

A.B*_*uin 14 c# rectangles

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

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

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

在此输入图像描述

Alv*_*ong 30

比方说,你有两个RectangleS的是r1r2,你可以检查他们是否互相此相交:

if(r1.IntersectsWith(r2))
{
    // Intersect
}
Run Code Online (Sandbox Code Playgroud)

如果您需要彼此相交的确切区域,则可以执行以下操作:

Rectangle intersectArea = Rectangle.Intersect(r1, r2);
Run Code Online (Sandbox Code Playgroud)

您可以查看文档:Rectangle.IntersectsWith,Rectangle.Intersect


其他重要说明:

我刚检查过,如果两个矩形只是在边缘上相互接触,则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)
}
Run Code Online (Sandbox Code Playgroud)


Céd*_*non 11

如果你不想依赖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)
Run Code Online (Sandbox Code Playgroud)