if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top )
ou, usando coordenadas cartesianas
(Com X1 sendo coordenado à esquerda, X2 sendo coordenado à direita , aumentando da esquerda para a direita e Y1 sendo a coordenação superior e Y2 sendo a coordenação inferior, aumentando de baixo para cima - se não é assim que seu sistema de coordenadas [por exemplo, a maioria dos computadores tem o Direção Y invertida], troque as comparações abaixo ) ...
if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)
Digamos que você tenha o Reto A e o Reto B. A prova é por contradição. Qualquer uma das quatro condições garante que nenhuma sobreposição possa existir :
- Cond1. Se a borda esquerda de A estiver à direita da borda direita de B, - então A estará totalmente à direita de B
- Cond2. Se a borda direita de A estiver à esquerda da borda esquerda de B, - então A estará totalmente à esquerda de B
- Cond3. Se a borda superior de A estiver abaixo da borda inferior de B, - então A estará totalmente abaixo de B
- Cond4. Se a borda inferior de A estiver acima da borda superior de B, - então A estará totalmente acima de B
Portanto, a condição para não sobreposição é
NÃO Sobreposição => Cond1 ou Cond2 ou Cond3 ou Cond4
Portanto, uma condição suficiente para Sobreposição é o oposto.
Sobreposição => NÃO (Cond1 ou Cond2 ou Cond3 ou Cond4)
A lei de De Morgan diz que
Not (A or B or C or D)
é o mesmo que Not A And Not B And Not C And Not D
usar De Morgan, temos
Não Cond1 e não Cond2 e não Cond3 e não Cond4
Isso é equivalente a:
- Borda esquerda de A à esquerda da borda direita de B, [
RectA.Left < RectB.Right
] e
- A borda direita de A para a direita da borda esquerda de B, [
RectA.Right > RectB.Left
] e
- O topo de A acima do fundo de B, [
RectA.Top > RectB.Bottom
] e
- Parte inferior de A abaixo da parte superior de B [
RectA.Bottom < RectB.Top
]
Nota 1 : É bastante óbvio que esse mesmo princípio pode ser estendido a qualquer número de dimensões.
Nota 2 : também deve ser bastante óbvio contar sobreposições de apenas um pixel, alterar o <
e / ou o >
limite desse para a <=
ou a >=
.
Nota 3 : Essa resposta, ao utilizar coordenadas cartesianas (X, Y), é baseada em coordenadas cartesianas algébricas padrão (x aumenta da esquerda para a direita e Y aumenta de baixo para cima). Obviamente, onde um sistema de computador pode mecanizar as coordenadas da tela de maneira diferente (por exemplo, aumentando Y de cima para baixo ou X Da direita para a esquerda), a sintaxe precisará ser ajustada de acordo /