2016-05-01 10 views
0

Hallo StackOverflow Community! Ich arbeite in einem Problem mit Kreisen Kollision. Um es einfach auszudrücken, sind alle Kollisionen ideal elastisch. Die Kugeln können sich nur in Diagonalen bewegen. Das klingt ziemlich simpel. Nun, aus irgendeinem Grund mit meinem aktuellen Code, den ich unten anbringe, "kleben" die Bälle aneinander, anstatt zu kollidieren. Ich denke, was passiert, ist, dass sie ständig "ihre Geschwindigkeiten tauschen" und deshalb können sie nicht auseinander gehen, aber ich könnte mich irren.2D Circle-Circle Kollision Seltsames Verhalten

[code removed]

+0

Wie hängt das mit C++ zusammen? – kennytm

+0

@kennytm fast die gleiche Syntax, aber ich habe keine Ahnung, warum es als das erste Tag ... Ich werde es entfernen, denke ich. – Micard

+0

Einfaches Vertauschen der Geschwindigkeiten führt zu unphysikalischen Bewegungen, es sei denn, Sie arbeiten in einem Mittelpunkt des Impulsreferenzrahmens. –

Antwort

1

ich einen anderen if Zustand nach if dist <= (2 * radius) hinzufügen würde zu überprüfen, ob sie aufeinander zu bewegen oder voneinander entfernt, indem der Abstand zwischen ihnen nach dem nächsten Schritt der Vorhersage und dem aktuellen Abstand zu vergleichen .

dist_next = sqrt(((x(i)+velocity_x(i)) - (x(j)+velocity_x(j))^2 + ((y(i)+velocity_y(i)) - (y(j)+velocity_y(j)))^2); 

if dist_next < dist 
... 
end 

Ich hoffe, dass ich die ganze Klammer bekam Recht ...

+0

Ich bekomme die Idee, aber wie würde ich es umsetzen? Wenn es Ihnen nichts ausmacht, ein Beispiel zu schreiben :) – Micard

+0

Meine Antwort wurde aktualisiert. Hoffe, es funktioniert ... – Jefinthejam

+0

Nein, du hast die Klammern nicht richtig bekommen, hahah, aber ja, es funktioniert, sie überlappen sich immer noch ein bisschen, aber ich kann das beheben! Ich danke dir sehr! – Micard

1

Eine Alternative zur Jefinthejam Antwort (und ich denke, eine weit verbreitete Art und Weise, es zu tun) wäre das Skalarprodukt zwischen dem berechnen zwei Geschwindigkeitsvektoren und überprüfen Sie sein Vorzeichen.

Wenn es negativ ist, gehen die Objekte voneinander weg und Sie können nicht sicher auf die Kollision reagieren. Die gute Sache ist, wenn Sie den Test viele Male pro Rahmen durchführen müssen, ist die Berechnung dieses Punktprodukts weniger teuer als die Quadratwurzel.