Überprüfen Sie, ob sich in Java zwei Rechtecke überlappen

1. Übersicht

In diesem kurzen Tutorial lernen wir, ein algorithmisches Problem zu lösen, bei dem überprüft wird, ob sich die beiden angegebenen Rechtecke überlappen.

Wir werden uns zunächst die Problemdefinition ansehen und dann schrittweise eine Lösung entwickeln.

Schließlich werden wir es in Java implementieren.

2. Problemdefinition

Nehmen wir an, wir haben zwei gegebene Rechtecke - r1 und r2 . Wir müssen prüfen, ob es zwischen r1 und r2 mindestens einen gemeinsamen Punkt gibt . Wenn ja, bedeutet dies einfach, dass sich diese beiden Rechtecke überlappen.

Schauen wir uns einige Beispiele an:

Wenn wir den allerletzten Fall bemerken, haben die Rechtecke r1 und r2 keine sich überschneidenden Grenzen. Sie überlappen jedoch Rechtecke, da jeder Punkt in r1 auch ein Punkt in r2 ist .

3. Ersteinrichtung

Um dieses Problem zu lösen, sollten wir zunächst programmgesteuert ein Rechteck definieren. Ein Rechteck kann leicht durch seine Koordinaten unten links und oben rechts dargestellt werden:

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

Dabei ist Point eine Klasse, die einen Punkt (x, y) im Raum darstellt:

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

Wir werden später die Methode isOverlapping (Rectangle other) in unserer Rectangle- Klasse definieren, um zu überprüfen, ob sie sich mit einem anderen gegebenen Rechteck überschneidet - other .

4. Lösung

Die beiden angegebenen Rechtecke überlappen sich nicht, wenn eine der folgenden Bedingungen erfüllt ist:

  1. Eines der beiden Rechtecke befindet sich über der Oberkante des anderen Rechtecks
  2. Eines der beiden Rechtecke befindet sich auf der linken Seite des linken Randes des anderen Rechtecks

In allen anderen Fällen überlappen sich die beiden Rechtecke. Um uns selbst zu überzeugen, können wir immer mehrere Beispiele anführen.

5. Java-Implementierung

Nachdem wir die Lösung verstanden haben, implementieren wir unsere isOverlapping () -Methode:

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; }

Unsere isOverlapping () -Methode in der Rectangle- Klasse gibt false zurück, wenn sich eines der Rechtecke entweder über oder auf der linken Seite des anderen befindet, andernfalls true .

Um herauszufinden, ob ein Rechteck über dem anderen liegt, vergleichen wir ihre y-Koordinaten . Ebenso vergleichen wir die x-Koordinaten , um zu überprüfen, ob sich ein Rechteck links vom anderen befindet.

6. Fazit

In diesem kurzen Artikel haben wir gelernt, wie man ein algorithmisches Problem löst, bei dem festgestellt wird, ob sich die beiden angegebenen Rechtecke überlappen. Es dient als Kollisionserkennungsstrategie für zwei rechteckige Objekte.

Wie üblich ist der gesamte Quellcode über Github verfügbar.