Given the force applied to the cue ball, there are two quantities I must calculate in this stage of the simulation. The first is the initial velocity of the ball that results from the hit. To calculate this, I use Newton's Second Law, given by

Using

Since, for the purposes of the shot, we can assume the initial velocity of the cue ball is zero, this equation becomes

The quantity Δ

Besides the initial translational velocity of the cue ball, there is also a rotational aspect of the ball’s movement that I must take into account. Anybody who has ever played a game of pool knows the importance of applying spin to the cue ball. Therefore, the second quantity I must calculate is the angular velocity of the cue ball. To do this, I need to know not only how far back the cue ball is drawn, but also where the cue ball is hit with respect to its center of mass. For example, assume the circle below is a lateral view of the cue ball.

If the small circle is the center of the cue ball (i.e. the center of mass), and the ball is struck where the cross is, the ball will have an initial angular velocity (top spin”) that will affect the ball’s movement across the table as well as its collision with any other ball.

To calculate the initial angular velocity, I use the concepts of rotational motion and another adaptation of

In this equation,

Just as the cue must apply force to the ball to give it an initial velocity, the cue must apply torque to the ball to give it an initial rotation. The

Just as the force must overcome the mass of the ball in order to move it, the torque must overcome the rotational inertia of the ball to rotate it. The

Since I can assume that the angular velocity is zero before the shot is made, this equation simplifies to

The quantities in this equation are identical to those in the equation for linear velocity given above, with the exception of the

Using these equations, I can calculate the initial linear and angular velocities of the cue ball after the shot is made. This completes the first stage of my simulation.

There are a couple important concepts that must be realized at this stage in the simulation. The first is that the ball is not always rolling. Immediately after it is struck, it slides along the felt for some period of time. How far it slides depends on its initial velocity and spin. The second is that the force of friction is not being applied through the ball’s center of mass. It is actually being applied along the ball’s perimeter, and so it becomes necessary to calculate the ball’s perimeter speed.

The exact point at which a sliding ball becomes a rolling ball is given by the equation

In this equation,

where

To deal with friction, I use

In this equation,

Combining this with

Similarly, we can derive a formula for the change in angular velocity:

By combining these equations, I can calculate the velocity a certain time later using the initial linear and angular velocity vectors. However, these equations only apply to a sliding ball. A rolling ball behaves similarly, but with a different coefficient of friction: the coefficient of rolling friction,

I know whether the ball is sliding or rolling using the condition stated above. Using this information, I can calculate velocity changes during a given time step. This completes the second stage of my simulation.

In this equation,

To simplify things, I make the following assignments:

The equation above now simplifies to:

Using the quadratic formula, I can easily solve for

This process is similar for collisions between balls and rails, but instead I calculate the difference between the ball and the rail and set it equal to

Using the times calculated, I can determine if a collision is going to occur within a given amount of time. If so, I move the balls to the time of that collision and recalculate their velocity vectors before continuing.

For collisions between balls, the first step is to calculate the normal to the collision plane. This is along the line between the centers of the two balls, so the easiest way to calculate it is to normalize the difference between the position vectors of the two balls.

The next step is to divide each velocity vector into a normal component and a tangential component. The normal component for ball 2 will be in the direction of the normal vector, and the normal component for ball 1 will be in the direction opposite the normal vector. The magnitude of these normal vectors can be calculated using the dot product, as shown below.

Once I’ve calculated the normal components of their velocity vectors, I can calculate the tangential components using vector subtraction:

During the collision, the tangential velocity components do not change. Using the normal components, I can treat the collision as 1-dimensional. This is depicted in the example below. The red arrows represent the velocity vectors immediately before the collision. The blue arrows represent the normal components of those vectors and the green arrows represent the tangential components of those vectors. The black dotted line is the collision plane.

To deal with the one-dimensional collision, I once again use

The quantity

Since the masses of all the balls are identical, we can cancel out the mass terms, yielding the equation above. Using the

This equation yields two possible solutions, only one of which is practical. Therefore, assuming total elasticity in the balls,

Now I return to the 2-dimensional collision problem above. Since the normal velocity vectors can simply be exchanged, the velocity of each ball immediately after the collision can be obtained by adding the tangential velocity to the normal velocity of the ball it collides with. This is shown below (the red arrows now represent the velocity vectors immediately after the collision).

The red vectors in the diagram on the right can be calculated using the equations below:

Now that I’ve handled the linear aspect of the collision, I have to consider the rotational aspect of it. The concepts are similar, but must now concern angular momentum and angular velocity instead of linear momentum and linear velocity. Angular momentum is denoted by

A rotational equivalent to the version of

However, the net torque during the collision is not zero because of the friction between the balls. Calculating the torque applied by this frictional force requires calculating the perimeter velocities of each of the balls at the point of collision. This is similar to the way I calculated the frictional force applied by the felt in stage 2, with some slight changes. There is a different coefficient of friction,

In this equation, vectors

Using this frictional force, I can calculate the change in angular velocity of ball 2 in the same way I did during stage 2, substituting the proper frictional force. This is shown below.

The exact same calculations can be made for ball 1, allowing me to obtain the change in angular velocity for ball 1 as well.

For collisions between a ball and a rail, a similar process is necessary.