You can also view this article at my Github Pages website (the formatting might be better there).
Consider an idealized model of a ball bouncing on the ground, where the ball is falling along a line normal to the ground, so that it remains on this line as it bounces, allowing us to treat its position and velocity as one-dimensional quantities. The only force acting on the ball while it is in the air is gravity, which subjects it to a constant downwards acceleration . When the ball hits the ground, it is instantaneously deflected upwards, resulting in its velocity being scaled by a factor of
, where
is a constant strictly between 0 and 1 (the coefficient of restitution, or to put it in more ordinary terms, the “amount of bounciness”).
At what point does the ball stop bouncing?
The answer I expected was that the ball would never stop bouncing. I thought it would keep bouncing forever, with the bounces getting smaller and smaller in height, to a point where they were practically negligible, but I didn’t think there would be any definite point where it would stop altogether.
But it turns out that this is incorrect. While the ball does indeed bounce an infinite number of times, with the bounces getting smaller and smaller in height, that doesn’t mean it keeps bouncing forever. The bounces get smaller and smaller not only in height, but also in duration, and the sum of their durations converges to a finite limit, meaning there is a time such that the sum of their durations is always less than, but can be made arbitrarily close to
. You can even calculate
using the following formula:
Here, is the time at which the first bounce begins and
is the velocity of the ball at the start of this first bounce. (The formula does require you to know
and
; it is possible to calculate
and
from the ball’s initial position and velocity, but the formula is a lot simpler and easier to understand if it’s left in terms of
and
rather than those initial values.)
⁂
Here’s how this formula can be derived. First, observe that between one bounce and the next, the ball moves with a constant acceleration . Also, the ball’s position (or rather, the position of its bottom point) at the start of the bounce will be the position of the ground, which we’ll write as
. So if we consider a bounce starting at a time
, where the ball has velocity
as it begins the bounce, the ball’s velocity
and position
at any subsequent time
before the next bounce will be given by the equations
The next time the ball bounces, its position will be again, so to find the time the current bounce ends and the next bounce begins, we should solve the equation
. Using the equation for
above, we can write
as an equivalent quadratic equation in
:
Since this equation has no constant term, it can be easily solved by factorising the LHS:
From this we see that when
(which we already knew) and also that
when
This is greater than
, since the ball moves away from the ground as it bounces, so the velocity
at the start of the current bounce is nonzero and has the opposite sign to
. Hence we can interpret
as the time of the next bounce. Accordingly, the duration of the current bounce is
. Furthermore, substituting
into the equation for
gives us that the velocity at the end of the bounce is
(this is also obvious if you visualize the bounce as a parabola). Hence the velocity at the start of the next bounce will be
.
To summarize: if the ball has velocity at the start of a bounce, then the duration of the bounce will be
and the velocity of the start of the next bounce will be
.
If we now consider the full sequence of bounces, we have that the velocities at the start of each bounce are in a geometric progression. So we can give a general formula for the velocity at the start of the
th bounce (for
):
Accordingly, the duration of the th bounce will be
. Hence the total time taken by the first
bounces (not including any time before the first bounce) will be
This is a geometric series, which can also be written as
Given that , we can take the limit as
approaches infinity, giving us the following expression for the total duration of the bounces:
The term in (1) comes from the fact that there’s also some time before the first bounce.
⁂
What about and
? How do we calculate them? It’s not that much more complicated. We use the same quadratic equation as before, only now the ball’s initial position is not necessarily
, but some arbitrary
. If we say that the positive direction is upwards, then we can assume that
, because the ball can’t be below the ground. We also have an arbitrary initial velocity
, and this doesn’t have to be positive like the velocity at the start of a bounce. It can be negative, positive or zero. So the equations of motion for the ball from time 0 up to the time the first bounce begins are:
The equation now comes out as the quadratic equation
The discriminant of this equation is
Since and
and
, we have
, this means that
and
. If
, this means that
and
. Whatever the case, we have that
is non-negative and
is non-positive. So we can interpret the two roots as endpoints of a “0th bounce” which is already in progress initially.
In particular, we have that the time the first bounce starts, , is the time the 0th bounce ends,
. That is:
As for , we can substitute
into the equation
to get the velocity at the end of the 0th bounce:
. The velocity at the start of the 1st bounce will be this scaled by
, i.e.
⁂
I started investigating this problem because I wanted to program a simulation of a ball bouncing on the ground. For this purpose, it would be ideal to have a function which, given a time , tells you what the ball’s position will be. The derivations above already give us almost all the information we need to do this. The only missing thing is a way to determine what number bounce is in progress at time
. For every integer
, let
so that is the time the
th bounce starts. Given a time
, we want to find the unique integer
such that
. Well, this chain of inequalities can also be written as
Doing some rearrangement, using the facts that and
are positive, we get the equivalent inequality
If we subtract each part of this chain of inequalities from 1, and then take its logarithm in base , the order of the parts is preserved (because these two functions are both strictly decreasing, given that
, and hence their composition is strictly increasing). So the chain of inequalities can also be written as
Now for each real number , the “floor-plus-one”
of
is the unique integer
such that
; hence we can conclude that
It is then straightforward to give a formula for , using the fact that the
th bounce starts at time
, and the ball’s velocity as it begins this bounce is
.
Here’s a graph of the trajectory defined by this function, made in Desmos:
The vertical line is where the bouncing stops.
If you go to the Github Pages version of this article, you can also see what the simulation looks like (WordPress won’t let me put a video here). The code for it is on Github.