Я только что проверил, что если два прямоугольника касаются друг друга на краю, 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')
Существует пересечение тогда и только тогда, когда: