Vérifier si deux rectangles se chevauchent en Java

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons apprendre à résoudre un problème algorithmique consistant à vérifier si les deux rectangles donnés se chevauchent.

Nous allons commencer par examiner la définition du problème, puis élaborer progressivement une solution.

Enfin, nous allons l'implémenter en Java.

2. Définition du problème

Disons que nous avons deux rectangles donnés - r1 et r2 . Nous devons vérifier s'il existe au moins un point commun entre r1 et r2 . Si oui, cela signifie simplement que ces deux rectangles se chevauchent.

Jetons un coup d'œil à quelques exemples:

Si nous remarquons le tout dernier cas, les rectangles r1 et r2 n'ont pas de frontières qui se croisent. Pourtant, ce sont des rectangles qui se chevauchent car chaque point de r1 est également un point de r2 .

3. Configuration initiale

Pour résoudre ce problème, nous devons commencer par définir un rectangle par programmation. Un rectangle peut être facilement représenté par ses coordonnées en bas à gauche et en haut à droite:

public class Rectangle { private Point bottomLeft; private Point topRight; //constructor, getters and setters boolean isOverlapping(Rectangle other) { ... } }

Point est une classe représentant un point (x, y) dans l'espace:

public class Point { private int x; private int y; //constructor, getters and setters }

Nous définirons plus tard la méthode isOverlapping (Rectangle other) dans notre classe Rectangle pour vérifier si elle chevauche un autre rectangle donné - autre .

4. Solution

Les deux rectangles donnés ne se chevaucheront pas si l' une des conditions ci-dessous est vraie:

  1. L'un des deux rectangles est au-dessus du bord supérieur de l'autre rectangle
  2. L'un des deux rectangles est sur le côté gauche du bord gauche de l'autre rectangle

Pour tous les autres cas, les deux rectangles se chevaucheront. Pour nous en convaincre, nous pouvons toujours en tirer plusieurs exemples.

5. Implémentation Java

Maintenant que nous comprenons la solution, implémentons notre méthode isOverlapping () :

public boolean isOverlapping(Rectangle other) { if (this.topRight.getY()  other.topRight.getY()) { return false; } if (this.topRight.getX()  other.topRight.getX()) { return false; } return true; }

Notre méthode isOverlapping () dans la classe Rectangle retourne false si l'un des rectangles est au-dessus ou à gauche de l'autre, true sinon.

Pour savoir si un rectangle est au-dessus de l'autre, nous comparons leurs coordonnées y . De même, nous comparons les coordonnées x pour vérifier si un rectangle est à gauche de l'autre.

6. Conclusion

Dans ce court article, nous avons appris à résoudre un problème algorithmique consistant à déterminer si les deux rectangles donnés se chevauchent. Il sert de stratégie de détection de collision pour deux objets rectangulaires.

Comme d'habitude, l'intégralité du code source est disponible sur Github.