if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top )
или, используя декартовы координаты
(X1 - координата слева, X2 - координата справа, увеличивается слева направо, Y1 - координата сверху, Y2 - координата снизу, увеличивается снизу вверх) ...
if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)
ПРИМЕЧАНИЕ: ДЛЯ ВСЕХ ТАК ПОЛЬЗОВАТЕЛЕЙ С РЕДАКТОРСКОЙ СИСТЕМОЙ. ПОЖАЛУЙСТА, Хватит возиться с этим.
Скажем, у вас есть Рект А и Рект Б.
Доказательство от противного. Любое из четырех условий гарантирует, что перекрытие не может существовать :
- COND1. Если левый край А находится справа от правого края В,
- тогда A находится полностью справа от B
- cond2. Если правый край А находится слева от левого края В,
- тогда A находится полностью слева от B
- Cond3. Если верхний край А ниже нижнего края В,
- тогда А полностью ниже В
- Cond4. Если нижний край А выше верхнего края В,
- тогда А полностью выше В
Итак, условие для Non-Overlap:
Cond1 Or Cond2 Or Cond3 Or Cond4
Следовательно, достаточным условием перекрытия является обратное.
Not (Cond1 Or Cond2 Or Cond3 Or Cond4)
Закон де Моргана гласит
Not (A or B or C or D)
совпадает с Not A And Not B And Not C And Not D
поэтому, используя Де Моргана, мы имеем
Not Cond1 And Not Cond2 And Not Cond3 And Not Cond4
Это эквивалентно:
- Левый край А слева от правого края В, [
RectA.Left < RectB.Right
] и
- Правый край А справа от левого края В, [
RectA.Right > RectB.Left
] и
- Верх A над низом B, [
RectA.Top > RectB.Bottom
] и
- Низ А под вершиной Б [
RectA.Bottom < RectB.Top
]
Примечание 1 : Совершенно очевидно, что этот же принцип может быть распространен на любое количество измерений.
Примечание 2 : Также должно быть достаточно очевидно подсчитывать перекрытия только одного пикселя, изменять <
и / или >
на этой границе на <=
или >=
.
Примечание 3 : Этот ответ при использовании декартовых координат (X, Y) основан на стандартных алгебраических декартовых координатах (x увеличивается слева направо, а Y увеличивается снизу вверх). Очевидно, что если компьютерная система может механизировать координаты экрана по-разному (например, увеличивая Y сверху вниз или X справа налево), синтаксис необходимо будет соответствующим образом скорректировать /