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:

  1. En av de to rektanglene er over den øvre kanten av det andre rektangelet
  2. 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.


$config[zx-auto] not found$config[zx-overlay] not found