[Physics] How to calculate impulse force on collision

collisioncomputational physicsnewtonian-mechanicssimulations

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 ?

Edit

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 .

Best Answer

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.