Registriert seit: 28. Jul 2003
1.528 Beiträge
Delphi 2005 Personal
|
Re: Kollisionen von Kreisen
3. Aug 2008, 10:54
Ich weiss nicht, wie du den Treffpunkt berechnest, aber ich habe mal einen Ansatz gehabt, der sehr gute Ergebnisse liefert:
Zuerst transformierst du dich in ein Bezugssystem, in dem eine Kugel ruht (in dem du deren Geschwindigkeit von der anderen abziehst und berechnest dann die Kollision, danach Trafo zurück. Wenn deine Kugeln bei x und x' liegen und die eine Kugel sich mit v bewegt, musst du nur noch die Gleichung |x+v*t-x'|=2r lösen. Das wird dann kurzzeitig etwas größer, ist aber eigentlich nur eine Gleichung, die quadratisch in t ist, so dass du zwischen 0 und 2 Gleichungen für t bekommst. (wenn sich die Kugel komplett durch die andere bewegt hat, ist die Abstandsgleichung wieder erfüllt. ) Du brauchst also nur eine pq-Formel anzusetzen und die "-" Lösung zu benutzen.
Damit kannst du dann sehr schnell alle Kollisionen berechnen. Hast du die, kannst du die beiden stoßenden Kugeln zum Treffpunkt bewegen, die Kollision ausrechnen und auch alle anderen Kugeln um dieses Zeitstück weiterbewegen, da sie in dieser Zeit auch nicht kollidieren. Das kannst du dann einfach so lange machen, bis alle Kugeln durch Reibung stark genug abgebremst wurde, bis ihre Geschwindigkeit unter einem epilon liegen. Da jede der Berechnungen sehr schnell ist, und du recht wenige Objekt hast, sollte das alles recht flüssig ablaufen. (Du kannst die Berechnung auch schon Beginnen, wenn der Spieler noch zielt und dann nur noch ein paar Zwischenergebnisse anzeigen).
Größter Aufwand bei dieser Berechnung ist dabei die Berechnung der trigonometrischen Funktionen bei der Rotationsmatrix, um die du kaum rumkommen wirst. Für den eher unwahrscheinlichen Fall, dass du in Zeitprobleme kommst, könntest du dir hier vielleicht eine Tabelle von 0°,0.5°,...,90° anlegen und dann einfach nachschlagen.
Wegen der Drehimpulsübertragung müsstest du mal einen Experimentalphysiker fragen, das dürfte nicht trivial werden, wenn es genau sein soll, vielleicht reichen da auch Heuristiken.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
|