Kleine Korrektur zu meinem Vorschlag oben:
Berechne zunächst alle möglichen Kollisionen im gerade aktuellen Timeframe. Alle Kollisionspaare in eine Liste, sortiere diese nach dem Zeitpunkt der Kollision innerhalb des Timeframes aufsteigend. (Leicht möglich anhand der Koeffizienten aus der Schnittpunktberechnung, der genaue (Echt-)Zeitliche Bezug ist ja unwichtig.)
Die erste Kollision ausführen, aber nur bis zu dem Punkt an dem sie sich berühren (bzw. miiiinimal dahinter, damit sie nicht noch einmal gefunden werden). Die neuen Geschwindigkeitsverktoren (bzw. deren Restanteil) zuweisen. Dann wieder alle möglichen Kollisionen berechnen, aber nun bei allen schon bewegten Objekten den Zeitanteil um den sie bewegt wurden hinzuaddieren. Dann wieder sortieren, usw. bis keine Kollision im Timeframe mehr statt findet.
Problem: Man muss für jede vorkommende Kollision n*(n-1)/2 (=alle) Kollisionen in Betracht ziehen, also wirklich den Schnitt bilden. Das kann ganz schön happig werden, aber dieses Verfahren sollte eine extrem gute Annäherung an die Realität ergeben.
Weiterhin ist zu bedenken, dass die Geschwindigkeitsvektoren die innerhalb des Timeframes partiell auf bewegte Objekte angewendet werden nicht die sind, die das Objekt für das nächste Timeframe hat. Es behält zwar die Richtung des letzten Vektors, dieser muss aber die Summe der Länge aller zwischendurch benutzten Vektoren haben. Das heisst du brauchst für jedes Objekt einen Geschwindigkeitsvektor und einen Längenakkumulator zusätzlich.
Darin ließen sich natürlich auch noch weitere physikalische Gegebenheiten einbetten wie Gleit- und Haftreibung, Elastizität und so weiter. Schneller wird's dann zwar auch nicht, aber hey, akkurat!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)