I've made a program which is supposed to simulate free fall of a ball on a ground.

For collision with the ground I relied on calculating the impulse force with the answer in this Phys.SE question but I think the law is, well, wrong, the force must be a very big force acting on short time.

The program didn't work, the ball went through the ground, I'm sure I applied the impulse force and the Normal force together, the force is greater than weight but is still small.

I have a working collision detection and I know the velocity of the ball before collision, what I want to know is the instantaneous impulse force acting on the ball on collision with the ground.

So , how to do that ? and why is this force so enormous that it stops the ball almost instantly ?


In this program I define $dt$ as constant equals to 0.1, then I simply say :

$$dv=(F/m)*dt$$ $$dl=dv*dt$$ I do these calculations for each frame .

this way I don't have to use integrals and I ease the calculations, though they won't be accurate but it's hard for a computer to simulate the world literally .

  • $\begingroup$ It is hard to know what went wrong for you. Integrating the equation of motion during a short impact requires extremely short time steps - short compared to the duration of the impulse. And the duration depends on the elasticity of the contact. The answer you referenced is insufficient to solve this problem. Can you give more details of your setup and calculation - and in particular how you integrate the equation of motion? $\endgroup$
    – Floris
    Jun 7, 2015 at 21:59

1 Answer 1


You need the integration step to be much shorter than the impact time. For most real world collisions, 0.1 second will be much too long.

The force will change during the collision - and given the very simplistic integration method you use, you have to integrate over sufficiently short steps during which the force doesn't change much.

You could do this by repeating the calculation multiple times, each time reducing the time step by 2x. Eventually, the solution will not change (much) when you make the time step shorter - then you will have a short enough step.

The collision time depends greatly on the size of the ball and the elastic properties of the ball and the surface - and the force-displacement relationship is not linear; but you could simplify things by assuming there is a small (but powerful) spring between ball and ground, with a very high $k$ value. If this spring deforms no more than 1 mm, it has to be able to store all the energy of the ball (where energy stored $E=\frac12 k x^2$ must be equal to the kinetic energy just before the collision, which is $\frac12 m v^2 = m\cdot g \cdot h$, the potential energy at the top of the trajectory).

If we do indeed assume a 1 mm deformation of the little spring, then we can compute the impact time. Assume a 50 g ball dropped from 1 m high:

$$\frac12 k x^2 = m\cdot g \cdot h\\ k = \sqrt{\frac{2\cdot 0.05 \cdot 10\cdot 1}{0.001^2}} = 10^6 N/m$$

Then the peak force is 1000 N.

The motion of the ball during the collision is simple harmonic motion, or

$$x = A \cos \omega t + B$$

setting $B=0$, $\omega = \sqrt{\frac{k}{m}}$, $A=1$ mm you can compute the impact time as $t = \pi / \omega = \pi \sqrt{m/k}$ = 0.7 ms

You should use a time step that is at least 1/4 of that... I would start with 0.1 ms and see what you get.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.