This simulation shows two blocks moving along a track and colliding with each other and the walls. One spring is attached to the wall with a spring. Try changing the mass of the blocks to see if the collisions happen correctly.
You can change parameters such as mass, spring stiffness, and friction (damping). You can drag either block with your mouse to change the starting positions.
The math behind the simulation is shown below. Also available are: open source code, documentation and a simple-compiled version which is more customizable.
The spring and block on the left use the same model as the single spring simulation. For a collision with the wall, we simply reverse the velocity. For collisions between moving blocks we use the law of conservation of momentum to determine the new velocities.
Define the following variables:
We find the velocity of the center of mass of the 2-block system.
v_{cm} = | m_{1} v_{1i} + m_{2} v_{2i} |
m_{1} + m_{2} |
Next we find the velocity of each block in the coordinate system (frame) that is moving along with the center of mass.
v_{1cm} = v_{1i} − v_{cm}
v_{2cm} = v_{2i} − v_{cm}
Next we reflect (reverse) each velocity in this center of mass frame, and translate back to the stationary coordinate system.
v_{1f} = −(v_{1i} − v_{cm}) + v_{cm}
v_{2f} = −(v_{2i} − v_{cm}) + v_{cm}
If you fully expand the above you get
| (1) |
| (2) |
As a check, we can calculate the pre- and post- collision momentum, which should be the same.
p_{i} = m_{1} v_{1i} + m_{2} v_{2i}
p_{f} = m_{1} v_{1f} + m_{2} v_{2f}
If you expand p_{f} using equations (1) and (2) and simplify you will see that p_{f} = p_{i} as expected.
Simulations on the computer are discrete in the sense that time advances in "chunks", not smoothly. In the diagram, we calculated the state of the world at time t = 10.0 and then at time t = 10.1 . But the collision happened sometime inbetween. So by the time we detect a collision, the objects are overlapping each other -- a physically impossible state.
The simulations on this website handle collisions as follows:
If you are not running the simulation in real time, you can take as long as you want to get as much accuracy as desired. But for a real time simulation, you may need to accept lower accuracy or use some fancier programming. For example, instead of using trial and error to find the time of collision, you could try to predict the time of collision based on the state of the system.
Other examples of simulations with collision handling are Roller Coaster with Flight, Molecule 2 and Rigid Body Collisions.
This web page was first published April 2001.