Подтвердить что ты не робот

Проверьте, находятся ли две области в контакте

Возможный дубликат:
Поиск области перекрытия двух прямоугольников (на С#)

У меня есть две области, обозначенные верхним левым и нижним правыми углами (рис .1).

В С#, как я могу проверить, находятся ли они в контакте (рис. 2)?

enter image description here

4b9b3361

Ответ 1

Скажем, у вас есть два 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)
}

Ответ 2

Если вы не хотите зависеть от 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)