Heim > Backend-Entwicklung > C++ > Wie können wir effizient feststellen, ob sich zwei Rechtecke überlappen?

Wie können wir effizient feststellen, ob sich zwei Rechtecke überlappen?

DDD
Freigeben: 2024-12-26 21:03:14
Original
806 Leute haben es durchsucht

How Can We Efficiently Determine if Two Rectangles Overlap?

Überlappende Rechtecke: Eine umfassende Analyse

Die Bestimmung, ob sich zwei Rechtecke in einer zweidimensionalen Ebene überlappen, ist ein grundlegendes Problem in der Computergrafik und der Computertechnik Geometrie. In diesem Artikel untersuchen wir einen effizienten Algorithmus zur Lösung dieses Problems.

Bedingungen für Überlappung

Zwei Rechtecke, A und B, überlappen genau dann, wenn vier Bedingungen erfüllt sind erfüllt sind:

  • Der linke Rand von A liegt links vom rechten Rand von B: RectA.Left < RectB.Right
  • Der rechte Rand von A liegt rechts vom linken Rand von B: RectA.Right > RectB.Left
  • Die Oberkante von A liegt über der Unterkante von B: RectA.Top > RectB.Bottom
  • Die Unterkante von A liegt unter der Oberkante von B: RectA.Bottom < RectB.Top

Algorithmus

Basierend auf diesen Bedingungen können wir einen Algorithmus zur Überprüfung auf Überlappung erstellen:

def check_overlap(RectA, RectB):
  return RectA.Left < RectB.Right and \
         RectA.Right > RectB.Left and \
         RectA.Top > RectB.Bottom and \
         RectA.Bottom < RectB.Top
Nach dem Login kopieren

Implementierung

In Ihrem C-Code können Sie diesen Algorithmus implementieren als folgt:

#include 

class Rectangle {
public:
  int left, right, top, bottom;
};

bool check_overlap(Rectangle rect1, Rectangle rect2) {
  return rect1.left < rect2.right && \
         rect1.right > rect2.left && \
         rect1.top > rect2.bottom && \
         rect1.bottom < rect2.top ;
}

int main() {
  Rectangle rect1, rect2;
  std::cout << "Enter the coordinates of Rectangle 1 (left, right, top, bottom): ";
  std::cin >> rect1.left >> rect1.right >> rect1.top >> rect1.bottom;

  std::cout << "Enter the coordinates of Rectangle 2 (left, right, top, bottom): ";
  std::cin >> rect2.left >> rect2.right >> rect2.top >> rect2.bottom;

  if (check_overlap(rect1, rect2)) {
    std::cout << "The rectangles overlap." << std::endl;
  } else {
    std::cout << "The rectangles do not overlap." << std::endl;
  }

  return 0;
}

Diese Implementierung fordert den Benutzer zur Eingabe der Koordinaten zweier Rechtecke auf und prüft basierend auf den oben genannten Bedingungen auf Überlappung.

Das obige ist der detaillierte Inhalt vonWie können wir effizient feststellen, ob sich zwei Rechtecke überlappen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage