Sjekk om to rektangler overlapper hverandre i Java
1. Oversikt
I denne raske opplæringen lærer vi å løse et algoritmisk problem med å kontrollere om de to gitte rektanglene overlapper hverandre.
Vi begynner med å se på problemdefinisjonen og deretter gradvis bygge opp en løsning.
Til slutt implementerer vi det i Java.
2. Problemdefinisjon
La oss si at vi har to gitte rektangler - r1 og r2. Vi må sjekke om det er minst ett vanlig punkt blant r1 og r2. Hvis ja, betyr det ganske enkelt at disse to rektanglene overlapper hverandre.
La oss se på noen eksempler:
Hvis vi merker det aller siste tilfellet, rektanglene r1 og r2 har ingen kryssende grenser. Likevel overlapper de rektangler som hvert punkt i r1 er også et poeng i r2.
3. Første oppsett
For å løse dette problemet, bør vi først starte med å definere et rektangel programmatisk. Et rektangel kan enkelt representeres av koordinatene nederst til venstre og øverst til høyre:
offentlig klasse Rektangel {private Point bottomLeft; privat Point TopRight; // constructor, getters and setters boolean isOverlapping (Rektangel annet) {...}}
hvor Punkt er en klasse som representerer et poeng (x, y) i verdensrommet:
offentlig klasse Punkt {privat int x; privat int y; // constructor, getters and setters}
Vi definerer senere isOverlapping (Rektangel annet) metode i vår Rektangel klasse for å sjekke om den overlapper med et annet gitt rektangel - annen.
4. Løsning
De to gitte rektangler vil ikke overlappe hvis en av nedenstående betingelser er oppfylt:
- En av de to rektanglene er over den øvre kanten av det andre rektangelet
- En av de to rektanglene er på venstre side av venstre kant av det andre rektangelet
For alle andre tilfeller vil de to rektanglene overlappe hverandre. For å overbevise oss selv kan vi alltid trekke ut flere eksempler.
5. Java-implementering
Nå som vi forstår løsningen, la oss implementere vår isOverlapping () metode:
public boolean isOverlapping (Rectangle other) {if (this.topRight.getY () other.topRight.getY ()) {return false; } hvis (this.topRight.getX () other.topRight.getX ()) {return false; } returner sant; }
Våre isOverlapping () metode i Rektangel klasse returnerer falsk hvis en av rektanglene er enten over eller til venstre for den andre, ekte ellers.
For å finne ut om det ene rektangelet er over det andre, sammenligner vi dem y-koordinater. På samme måte sammenligner vi x-koordinater for å sjekke om det ene rektangelet er til venstre for det andre.
6. Konklusjon
I denne korte artikkelen lærte vi hvordan vi kan løse et algoritmisk problem med å finne ut om de to gitte rektanglene overlapper hverandre. Det fungerer som en kollisjonsdeteksjonsstrategi for to rektangulære objekter.
Som vanlig er hele kildekoden tilgjengelig på Github.