if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top )
або, використовуючи декартові координати
(Якщо X1 - ліва координата, X2 - права координата, збільшується зліва направо, а Y1 - верхня координата , а Y2 - нижня координата , збільшується знизу вгору - якщо це не так, як ваша система координат [наприклад, більшість комп'ютерів мають Y напрямок зворотний], поміняйте місцями порівняння нижче ) ...
if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)
Скажіть, у вас є Rect A, а Rect B. Доказ є суперечливістю. Будь-яка з чотирьох умов гарантує відсутність перекриття :
- Cond1. Якщо лівий край A знаходиться праворуч від правого краю B, - тоді A є повністю праворуч від B
- Cond2. Якщо правий край A знаходиться ліворуч від лівого краю B, - тоді A є повністю ліворуч від B
- Cond3. Якщо верхній край A знаходиться нижче нижнього краю B, - тоді A зовсім нижче B
- Cond4. Якщо нижній край A знаходиться над верхнім краєм B, - тоді A повністю над B
Отже, умова для неперекриття є
NON-Overlap => Cond1 Або Cond2 Або Cond3 Або Cond4
Тому достатньою умовою перекриття є протилежне.
Перекриття => НЕ (Cond1 або Cond2 або Cond3 або Cond4)
Закон Де Моргана говорить
Not (A or B or C or D)
те саме, щоNot A And Not B And Not C And Not D
і використання De Morgan, у нас є
Не Cond1 і не Cond2 і не Cond3 і не Cond4
Це еквівалентно:
- Лівий край A зліва від правого краю B, [
RectA.Left < RectB.Right
] та
- Правий край праворуч від лівого краю В, [
RectA.Right > RectB.Left
] та
- А вгорі над нижньою частиною B, [
RectA.Top > RectB.Bottom
] та
- A внизу вгорі B [
RectA.Bottom < RectB.Top
]
Примітка 1. Досить очевидно, що цей самий принцип можна поширити на будь-яку кількість вимірів.
Примітка 2. Також має бути досить очевидним підрахунок перекриттів лише одного пікселя, зміна <
та / або введення >
на цій межі на а <=
чи а >=
.
Примітка 3 : Ця відповідь при використанні декартових координат (X, Y) заснована на стандартних алгебраїчних декартових координатах (x збільшується зліва направо, а Y збільшується знизу вгору). Очевидно, коли комп'ютерна система може по-різному механізувати координати екрана (наприклад, збільшуючи Y зверху вниз, або X справа наліво), синтаксис потрібно буде відповідно відрегулювати /