if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top )
ou, en utilisant des coordonnées cartésiennes
(Avec X1 étant la coordonnée gauche, X2 étant la coordonnée droite, augmentant de gauche à droite et Y1 étant la coordonnée supérieure, et Y2 étant la coordonnée inférieure, augmentant de bas en haut - si ce n'est pas ainsi que votre système de coordonnées [par exemple, la plupart des ordinateurs ont le Direction Y inversée], permutez les comparaisons ci-dessous ) ...
if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)
Disons que vous avez Rect A et Rect B. La preuve est par contradiction. L'une des quatre conditions garantit qu'aucun chevauchement ne peut exister :
- Cond1. Si le bord gauche de A est à droite du bord droit de B, - alors A est totalement à droite de B
- Cond2. Si le bord droit de A est à gauche du bord gauche de B, - alors A est totalement à gauche de B
- Cond3. Si le bord supérieur de A est inférieur au bord inférieur de B, - alors A est totalement inférieur à B
- Cond4. Si le bord inférieur de A est au-dessus du bord supérieur de B, - alors A est totalement au-dessus de B
La condition de non-chevauchement est donc
NON-Overlap => Cond1 ou Cond2 ou Cond3 ou Cond4
Par conséquent, une condition suffisante pour Overlap est le contraire.
Chevauchement => NON (Cond1 ou Cond2 ou Cond3 ou Cond4)
La loi de De Morgan dit que
Not (A or B or C or D)
c'est la même chose qu'en Not A And Not B And Not C And Not D
utilisant De Morgan, nous avons
Pas Cond1 et pas Cond2 et pas Cond3 et pas Cond4
Cela équivaut à:
- Bord gauche de A à gauche du bord droit de B, [
RectA.Left < RectB.Right
] et
- Le bord droit de A à droite du bord gauche de B, [
RectA.Right > RectB.Left
] et
- Le haut de A au-dessus du bas de B, [
RectA.Top > RectB.Bottom
] et
- Le bas de A sous le haut de B [
RectA.Bottom < RectB.Top
]
Note 1 : Il est assez évident que ce même principe peut être étendu à n'importe quel nombre de dimensions.
Note 2 : Il devrait également être assez évident de compter les chevauchements d'un seul pixel, de changer le <
et / ou le >
sur cette frontière en a <=
ou a >=
.
Remarque 3 : Cette réponse, lorsque vous utilisez des coordonnées cartésiennes (X, Y), est basée sur des coordonnées cartésiennes algébriques standard (x augmente de gauche à droite et Y augmente de bas en haut). De toute évidence, lorsqu'un système informatique peut mécaniser les coordonnées de l'écran différemment (par exemple, en augmentant Y de haut en bas ou X de droite à gauche), la syntaxe devra être ajustée en conséquence /