Wie z.B. ein Rechteck in einem größeren Rechteck, wobei das kleinere Rechteck immer wieder von den Wänden abprallt. Halt eine Kollisionsabfrage zwischen 2 Objekten (Ich weiß jetzt nicht wie viel sich eine Kollisionsabfrage mit einem Rahmen von der mit einem Objekt unterscheidet...)
Tja, Deine Fragen sind ja eher mathematischer Natur, als auf Python bezogen.
Mit deinem oben zitierten Beispielt, definierst Du eigentlich einen speziellen Fall. Normalerweise würden Kollisionen zwischen zwei Rechtecken (R1, R2) dann festzustellen sein, wenn mindestens einer der Punkte von R1 innerhalb der Punktwolke R2 liegt. Das sollte für Dich ja nicht so schwer festzustellen sein, weil die x-Koordinate des Punktes aus R1 >= des x Werts des Punktes oben-links in R2 und <= des x Werts des Punktes oben-rechts in R2 sein muss. Bei dem y Wert ist es entsprechend. (aufzeichen hilft
)
Dein Fall beschreibt eher so etwas wie einen "Teich" in dem deine Rechtecke "schwimmen". D.h. so gesehen käme es ständig zu einer Kollision zwischen den kleinen herumschwimmenden Rechtecken und dem Rechteck des "Teichs".
D.h. Du hast jetzt zwei Möglichkeiten:
1. Du beschreibst den "Teich" in seiner speziellen Funktion, das die Objekte in ihm nicht herauskommen.
2. Du "mauerst" einen Teich aus "großen" Rechtecken um die "Wasserfläche" herum.
Im Fall 1 dürfte kein Punkt eines der kleinen Rechtecke (die wir jetzt mal Fische nennen
) einen x-Wert < x-min-Teich oder > x-max-Teich haben; entsprechend keinen y-Wer < y-min-Teich oder > y-max-Teich.
Im Fall 2 gilt die obige Beschreibung von der Kollision bzw. - um das genauer auszudrücken - der Überlappung von zwei Rechecken. ... Das würde die Art der Kollisions-/Überlappungsberechnung also vereinheitlichen, was ja bei der Entwicklung immer gern gesehen ist
.
Ich könnte mir vorstellen, dass Dein "Teich", der Bildschirm ist und Du willst nicht, dass die "Fische" aus dem Bild schwimmen
!?
Übrigens bietet pygame (
http://www.pygame.org) auf dieser Grundlage bereits ein fertiges System zur "Überlappungsabfrage" der in diesem Package verwendeten Sprites auf Basis von "Rect" Objekten.
Es gibt naütlich bei diese Art von Kollisionsbestimmung noch ein weiteres Problem ... abhängig von dem Detailgrad den Du benötigst. (Das Problem wird auch nicht von pygame beseitigt.)
Wenn Du eine Überlappung feststellst, kann es vielleicht schon zu spät sein, da Du ein "Eindringen" eines Rechtecks (sprich die Überlappung) in ein anderes verhindern willst.
Ich bin mir selbst noch nicht ganz sicher, wie man damit am besten umgeht, aber es läuft wohl darauf hinaus, dass man dann eine Analyse der Kollision des Bewegungsvektors des Rechtecks vornimmt ... und das wohl auch von jedem Punkt der Bounding Box aus gesehen. Einige Infos dazu kannst Du hier finden:
http://java.sys-con.com/node/46663
Such in dem Artikel mal nach "processCollisions()". Die Bilder dazu erläutern das ebenfalls.
Kleiner Tipp noch: Um die Auflösung der Kollisions zwischen zwei Objekten, die durch ein Rechteck repräsentiert werden, zu erhöhen, verwendet man statt des einen Rechtecks zur Repräsentation einfach mehrere
.