Возможный дубликат:
Поиск области перекрытия двух прямоугольников (на С#)
У меня есть две области, обозначенные верхним левым и нижним правыми углами (рис .1).
В С#, как я могу проверить, находятся ли они в контакте (рис. 2)?
Возможный дубликат:
Поиск области перекрытия двух прямоугольников (на С#)
У меня есть две области, обозначенные верхним левым и нижним правыми углами (рис .1).
В С#, как я могу проверить, находятся ли они в контакте (рис. 2)?
Скажем, у вас есть два Rectangle
, которые r1
и r2
, вы можете проверить, пересекаются ли они друг с другом следующим образом:
if(r1.IntersectsWith(r2))
{
// Intersect
}
Если вам нужна точная область, с которой они пересекаются друг с другом, вы можете сделать это:
Rectangle intersectArea = Rectangle.Intersect(r1, r2);
Вы можете проверить документацию: 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)
}
Если вы не хотите зависеть от 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)