Heim >Backend-Entwicklung >C++ >Wie stellt man fest, ob sich zwei Rechtecke überlappen?

Wie stellt man fest, ob sich zwei Rechtecke überlappen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 04:08:25960Durchsuche

How Do You Determine if Two Rectangles Overlap?

Bestimmen der Überlappung zwischen Rechtecken:

Ihr erster Ansatz zur Bestimmung der Überlappung zwischen Rechtecken scheint auf einem anderen Algorithmus als dem hier verlinkten zu basieren die Frage. Der bereitgestellte Algorithmus verwendet einen einfacheren Vergleich von Rechteckkoordinaten, wie unten gezeigt:

if (RectA.Left < RectB.Right && RectA.Right > RectB.Left &&
    RectA.Top > RectB.Bottom && RectA.Bottom < RectB.Top) 

 // Assuming Left, Right, Top and Bottom are the coordinates of the rectangles along the X and Y axis

In kartesischen Koordinaten kann diese Bedingung ausgedrückt werden als:

if (RectA.X1 < RectB.X2 && RectA.X2 > RectB.X1 &&
    RectA.Y1 > RectB.Y2 && RectA.Y2 < RectB.Y1)

Beweis durch Widerspruch:

Diese Bedingung basiert auf dem Prinzip des Widerspruchsbeweises. Wenn eine der folgenden Bedingungen zutrifft, können sich die Rechtecke nicht überlappen:

  • Der linke Rand von RectA liegt rechts vom rechten Rand von RectB (RectA liegt vollständig rechts von RectB)
  • Der rechte Rand von RectA liegt links vom linken Rand von RectB (RectA liegt vollständig links von RectB)
  • Die Oberkante von RectA liegt unter der Unterkante von RectB (RectA liegt vollständig unter RectB)
  • Die Unterkante von RectA liegt über der Oberkante von RectB (RectA liegt vollständig über RectB)

Daher ist die Bedingung für eine Überlappung das Gegenteil davon Bedingungen:

  • Der linke Rand von RectA liegt links vom rechten Rand von RectB.
  • Der rechte Rand von RectA liegt rechts vom linken Rand von RectB.
  • Der obere Rand von RectA liegt darüber Die Unterkante von RectB
  • Die Unterkante von RectA liegt unten Oberkante von RectB

Zusätzliche Hinweise:

  • Dieser Algorithmus geht davon aus, dass die Rechtecke parallel zur X- und Y-Achse verlaufen.
  • Um Überlappungen von einem Pixel zu ermöglichen, ändern Sie < und > Operatoren zu <= und >= an den relevanten Grenzen.
  • Der Algorithmus kann leicht für verschiedene Koordinatensysteme angepasst werden (z. B. wenn Y von oben nach unten zunimmt).
  • Das obige ist der detaillierte Inhalt vonWie stellt man fest, ob sich zwei Rechtecke überlappen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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