How to handle simultaneous particles collision in simulation?

AI Thread Summary
Simultaneous particle collisions in simulations can yield different results based on the order in which collisions are resolved, leading to inconsistencies. In a scenario with three colliding balls, resolving collisions in different sequences produces varying final states, which should not occur in a physically accurate simulation. The discussion emphasizes that all potential collisions must be resolved before updating the simulation to ensure consistent results. It suggests that iterating through each particle and resolving collisions with all others before advancing the simulation is the correct approach. Ultimately, achieving accurate collision handling requires considering all interactions simultaneously rather than sequentially.
nsNas
Messages
2
Reaction score
0
Suppose there are 3 balls colliding at the same time. I find that the order in which I resolve collisions makes a difference in the final result, which ofcourse makes no sense.

To explain and keep things simple, consider 3 balls in 1D, all same mass, elastic collision. The numbers at the top are the speeds and the arrows is the direction. Assume they are currently all touching each others, i.e. in collision

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

This shows ball A hitting ball B from the back and ball B and C are colliding face on.

Now if we resolve collision A with B first, followed by resolving collision B with C, but using the new speed of B, this should give the same result if we instead have resolved collision of B with C, followed by resolving A with B (using the new speed of B).

But it does not.

first case: A with B, followed by B with C

A with B gives

Code:
 -->1   -->2
   O     O  
   A     B

and B with C gives (but using new B speed of 2 above, not the original speed of 1)

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

Hence the final result is

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

second case: B with C, followed by A with B

B with C gives

Code:
 <--3   --->1
   O     O  
   B     C
A with B (but using new speed of B of 3 above, not original 1)

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

Hence final result is

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

You can see the final state is different.

What Am I doing wrong? and more importantly, what is the correct method to handle this?

For simulation with many balls and also collision with walls, this case is very possible. (for example, ball hitting a wall and being hit by another ball at the same time, would give same problem as above, the order gives different results).

Currently I use a loop to iterate over all objects and resolve collisions between each 2 at a time. Hence the order I use is arbitrary (order is just the index of the ball in an array).
 
Physics news on Phys.org
You're on the right track, but the problem is, you have not worked it through. Let me show this for one of the cases.

nsNas said:
first case: A with B, followed by B with C

A with B gives

Code:
 -->1   -->2
   O     O  
   A     B

and B with C gives (but using new B speed of 2 above, not the original speed of 1)

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

Hence the final result is

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

Is that the final configuration? Can A really go to the right with speed 1 when B is going to the left with speed 3?
 
Is that the final configuration? Can A really go to the right with speed 1 when B is going to the left with speed 3?

Of course not, but this will cause collision between A and B in the next time step.

What else do you suggest doing? In all collision detections I've seen, one goes over each particle at a time, resolves its collisions with all others, and then update the simulation one time step (i.e. move all particles using their new speeds), and repeat.

How else should one handle this otherwise?
 
nsNas said:
Of course not, but this will cause collision between A and B in the next time step.

What else do you suggest doing? In all collision detections I've seen, one goes over each particle at a time, resolves its collisions with all others, and then update the simulation one time step (i.e. move all particles using their new speeds), and repeat.

How else should one handle this otherwise?

I think this is the right way to handle it. But do the next time step! Your original question said your "final result" is different in the two cases. The final result is when ALL collisions that could happen, have happened.
 
Hello everyone, Consider the problem in which a car is told to travel at 30 km/h for L kilometers and then at 60 km/h for another L kilometers. Next, you are asked to determine the average speed. My question is: although we know that the average speed in this case is the harmonic mean of the two speeds, is it also possible to state that the average speed over this 2L-kilometer stretch can be obtained as a weighted average of the two speeds? Best regards, DaTario
Thread 'Beam on an inclined plane'
Hello! I have a question regarding a beam on an inclined plane. I was considering a beam resting on two supports attached to an inclined plane. I was almost sure that the lower support must be more loaded. My imagination about this problem is shown in the picture below. Here is how I wrote the condition of equilibrium forces: $$ \begin{cases} F_{g\parallel}=F_{t1}+F_{t2}, \\ F_{g\perp}=F_{r1}+F_{r2} \end{cases}. $$ On the other hand...
I know that mass does not affect the acceleration in a simple pendulum undergoing SHM, but how does the mass on the spring that makes up the elastic pendulum affect its acceleration? Certainly, there must be a change due to the displacement from equilibrium caused by each differing mass? I am talking about finding the acceleration at a specific time on each trial with different masses and comparing them. How would they compare and why?
Back
Top