1. Panoramica
In questo rapido tutorial, impareremo a risolvere un problema algoritmico di controllo della sovrapposizione dei due rettangoli dati.
Inizieremo esaminando la definizione del problema e quindi svilupperemo progressivamente una soluzione.
Infine, lo implementeremo in Java.
2. Definizione del problema
Supponiamo di avere due rettangoli dati: r1 e r2 . Dobbiamo verificare se c'è almeno un punto comune tra r1 e r2 . Se sì, significa semplicemente che questi due rettangoli si sovrappongono.
Diamo uno sguardo ad alcuni esempi:

Se notiamo l'ultimo caso, i rettangoli r1 e r2 non hanno confini intersecanti. Tuttavia, sono rettangoli sovrapposti poiché ogni punto in r1 è anche un punto in r2 .
3. Installazione iniziale
Per risolvere questo problema, dobbiamo prima iniziare definendo un rettangolo a livello di programmazione. Un rettangolo può essere facilmente rappresentato dalle sue coordinate in basso a sinistra e in alto a destra:
public class Rectangle { private Point bottomLeft; private Point topRight; //constructor, getters and setters boolean isOverlapping(Rectangle other) { ... } }
dove Point è una classe che rappresenta un punto (x, y) nello spazio:
public class Point { private int x; private int y; //constructor, getters and setters }
Definiremo in seguito il metodo isOverlapping (Rectangle other) nella nostra classe Rectangle per verificare se si sovrappone a un altro rettangolo dato - altro .
4. Soluzione
I due rettangoli dati non si sovrapporranno se una delle seguenti condizioni è vera:
- Uno dei due rettangoli si trova sopra il bordo superiore dell'altro rettangolo
- Uno dei due rettangoli si trova sul lato sinistro del bordo sinistro dell'altro rettangolo

In tutti gli altri casi, i due rettangoli si sovrapporranno l'uno con l'altro. Per convincerci, possiamo sempre tirare fuori diversi esempi.
5. Implementazione Java
Ora che abbiamo capito la soluzione, implementiamo il nostro metodo 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; }
Il nostro metodo isOverlapping () nella classe Rectangle restituisce false se uno dei rettangoli è sopra o a sinistra dell'altro, altrimenti true .
Per scoprire se un rettangolo è sopra l'altro, confrontiamo le loro coordinate y . Allo stesso modo, confrontiamo le coordinate x per verificare se un rettangolo è a sinistra dell'altro.
6. Conclusione
In questo breve articolo, abbiamo imparato come risolvere un problema algoritmico per scoprire se i due rettangoli dati si sovrappongono l'uno con l'altro. Serve come strategia di rilevamento delle collisioni per due oggetti rettangolari.
Come al solito, l'intero codice sorgente è disponibile su Github.