Kollisionsabfrage bei 2 bewegten Objekten
-
Ich habe mehrere Objekte (Bälle) die sich auf einem SDL_Surface bewegen,
ich kenne deren Geschwindigkeit(pixel pro frame) deren aktuelle und nächste position.Wie baue ich nun am besten eine kollisionsabfrage ein?
Die Bälle sollen sich also bei berührung gegenseitig abstoßen.Meine Idee wäre erstmal die nächste position der bälle auf gleichheit zu überprüfen (bzw. einen bestimmten bereich um die position der bälle auf überschneidungen), doch wie schaff ich es nun das sich die beiden bälle gegenseitig abstoßen? An den Wänden hab ich einfach jeweils die Geschwindigkeit in eine bestimmte richtung umgedreht also von +10 nach -10.
Wie macht man das ganze aber bei bällen (von mir aus auch quadrate wenn das wesentlich leichter geht)? Schließlich kommt es ja darauf an wo sie sich treffen.
gibt es dazu spezielle Algorithmen? Wie macht man sowas normalerweise?//EDIT:
Was passiert wenn mehrere Objekte gleichzeitig zusammenstoßen?
Dann wird eine Kugel nach der ersten positiven Kollisionsabfrage in die eine Richtung geschleudert, nach der zweiten wieder in die andere. Kann es hierbei zu überschneidungen kommen?
-
Den Geschwindigkeitsvektor an der Tangentialebene des Berührungspunktes spiegeln.
Bye, TGGC (Das Eine, welches ist.)
-
Wenn die Bälle das gleiche Gewicht haben, dann kannst du die Geschwindigkeitsvektoren vertauschen.
-
Deine Antwort klingt einleutend, wenn auch schwer umzusetzten für mich,
trotzdem werd ichs mal verscuhen, da meine abfrage ob die beiden objekte
kollidieren jetzt funktioniert.
Was mir fehlt ist jetzt noch der genau Punkt. Dann muss ich wohl noch
nen algorithmus basteln der mir meine geschwindigkeit anpasstJedenfalls danke für die schnelle hilfe, ich werd sehn wie ichs mit der umsetzung hinkriege, wenns nicht klappt post ich nocmal

-
Gib mal bei Wikipedia "Elastischer Stoß" ein...
-
Ich hab jetzt erstmal BigBoomer's mehtode implementiert. Es funktioniert prächtig.
Ich denke jedoch das ich früher oder später nicht um den Berührugspunkt und dessen Tagentialgeraden (ist noch 2D) herumkomme.
-
BigBoomer schrieb:
Wenn die Bälle das gleiche Gewicht haben, dann kannst du die Geschwindigkeitsvektoren vertauschen.
Das ist ja wohl mal totaler Unsinn. Dann könnte man beim Billard nur gerade Stöße machen. Die Beträge kann man vertauschen, die Richtungen nicht!
Bye, TGGC (Das Eine, welches ist.)
-
HM,
also ich hab eine geschwindigkeit nach oben und eine nach rechts.
Wenn ich diese jetzt bei einem zusammenstoß mit einem anderen objekt mit dessen geschwindigkeiten vertausche gehts.Aber mal noch ne andere Frage, wenn ich das ganze jetzt zu einem pong spiel zusammenbauen will, wie mach ich das am besten mit dem schläger.
Wenn ich eine "normale" Kollision anheme ist einfallwinkel gleich ausfallswinkel und das spiel hat irgendwie weniger sinn, als wenn man den ball noch irgendwie beeinflussen könnte mit dem schläger.
Weis einer was ich meine (
) und hat ne idee?
-
Storm.Xapek.de schrieb:
HM,
also ich hab eine geschwindigkeit nach oben und eine nach rechts.
Wenn ich diese jetzt bei einem zusammenstoß mit einem anderen objekt mit dessen geschwindigkeiten vertausche gehts.Was geht dann? Dann brauchst du auch gar keine Kollision, wenn sich dann A wie B und B wie A weiterbewegt, dann kannst du die Dinger auch durcheinander durchfliegen lassen, und es ist genauso, nur das die Objekte vertauscht sind. Physikalisch totaler Nonsens.
Bye, TGGC (Das Eine, welches ist.)
-
wenn du die aktuelle position hast, würde ich das os machen :
if( ball[1].x > ball[2].x && ball[1].x < ball[2].x + durchmesser ) { if( ball[1].y > ball[2].y && ball[1].y < ball[2].y + durchmesser ) { AKTION } }ich denke das ist die einfachste lösung
-
Und was gibt das? Verschobene Quadratbälle!
Bye, TGGC (Das Eine, welches ist.)