¿Cómo manejar la colisión simultánea para que el orden de procesamiento no importe?

Supongamos que hay 3 bolas que chocan al mismo tiempo. Me parece que el orden en el que resuelvo las colisiones hace una diferencia en el resultado final, lo que, por supuesto, no tiene sentido.

Para explicar y mantener las cosas simples, considere 3 bolas en 1D, todas con la misma colisión elástica y de masa. Los números en la parte superior son las velocidades y las flechas son la dirección. Supongamos que actualmente todos se tocan entre sí, es decir, en colisión

 -->2   -->1 <---3
   O     O       O
   A     B       C

Esto muestra la bola A golpeando la bola B desde la espalda y la bola B y C chocan cara.

Ahora, si resolvemos la colisión A con B primero, seguimos resolviendo la colisión B con C, pero utilizando la nueva velocidad de B, esto debería dar el mismo resultado si, en cambio, hemos resuelto la colisión de B con C, seguido de resolver A con B ( Usando la nueva velocidad de B).

Pero no lo hace.

Primer caso: A con B, seguido de B con C

A con B da

 -->1   -->2
   O     O  
   A     B  

y B con C da (pero usando la nueva velocidad B de 2 arriba, no la velocidad original de 1)

 <--3   -->2
   O     O  
   B     C  

De ahí que el resultado final sea

 -->1   <--3  ---->2
   O     O       O
   A     B       C
segundo caso: B con C, seguido de A con B

B con C da

 <--3   --->1
   O     O  
   B     C

A con B (pero usando una nueva velocidad de B de 3 arriba, no original 1)

<--3    -->2
   O     O  
   A     B  

De ahí que el resultado final sea

 <--3  -->2   ---->1
   O     O       O
   A     B       C

Se puede ver que el estado final es diferente.

¿Qué estoy haciendo mal? y lo que es más importante, ¿cuál es el método correcto para manejar esto?

Para simulación con muchas bolas y también colisión con paredes, este caso es muy posible. (Por ejemplo, si la bola golpea una pared y al ser golpeada por otra bola al mismo tiempo, daría el mismo problema que antes, la orden da resultados diferentes).

Actualmente utilizo un bucle para recorrer en iteración todos los objetos y resolver colisiones entre cada 2 a la vez. Por lo tanto, el orden que uso es arbitrario (orden es solo el índice de la bola en una matriz).

Respuestas a la pregunta(1)

Su respuesta a la pregunta