Implementing Mathavan Cushion Physics

April 2026 ยท 5 min read

Billiards is often simplified in games as a series of linear reflections, but the reality of ball-cushion interaction is far more complex. The rebound angle and velocity of a ball hitting a cushion are influenced by its incoming spin, velocity, and the physical properties of the cushion itself.

To capture this accurately, we've implemented a numerical model based on the work of Mathavan et al. (2010), "A theoretical analysis of the dynamics of a billiards ball colliding with a cushion". This approach models the interaction by breaking down the collision into compression and restitution phases, accounting for slip velocities at both the cushion and table contact points.

Forces on ball at cushion
Forces on ball at cushion. (Source: Mathavan et al. (2010))

The Mathavan Model

The core of the implementation involves calculating the slip velocity at the cushion contact point (I) and the table contact point (C).

Slip velocity at cushion contact point I:

\[ \dot{x}_I = \dot{v}_x + \dot{\omega}_y R \sin \theta - \dot{\omega}_z R \cos \theta \qquad \dot{y}'_I = -\dot{v}_y \sin \theta + \dot{\omega}_x R \] \[ \phi = \arctan\left(\frac{\dot{y}'_I}{\dot{x}_I}\right) \qquad s = \sqrt{(\dot{x}_I)^2 + (\dot{y}'_I)^2} \]

Slip velocity at table contact point C:

\[ \dot{x}_C = \dot{v}_x - \dot{\omega}_y R \qquad \dot{y}_C = \dot{v}_y + \dot{\omega}_x R \] \[ \phi' = \arctan\left(\frac{\dot{y}_C}{\dot{x}_C}\right) \qquad s' = \sqrt{(\dot{x}_C)^2 + (\dot{y}_C)^2} \]

Numerical Solutions

The simulation uses numerical solutions for the centroid velocity of the ball during the interaction.

\[ (\dot{v}_x)_{n+1} - (\dot{v}_x)_n = - \frac{1}{M} \left[\mu_w \cos(\phi) + \mu_s \cos(\phi') \cdot (\sin \theta + \mu_w \sin(\phi) \cos \theta)\right] \Delta P_I \] \[ (\dot{v}_y)_{n+1} - (\dot{v}_y)_n = - \frac{1}{M} \left[ \cos \theta - \mu_w \sin \theta \sin \phi + \mu_s \sin \phi' \cdot \left( \sin \theta + \mu_w \sin \phi \cos \theta \right) \right] \Delta P_I \]

And for the angular velocity:

\[ (\dot{\omega}_x)_{n+1} - (\dot{\omega}_x)_n = -\frac{5}{2MR}[\mu_w \sin(\phi) + \mu_s \sin(\phi') \times (\sin(\theta) + \mu_w \sin(\phi)\cos(\theta))]\Delta P_I \] \[ (\dot{\omega}_y)_{n+1} - (\dot{\omega}_y)_n = -\frac{5}{2MR}[\mu_w \cos(\phi)\sin(\theta) - \mu_s \cos(\phi') \times (\sin(\theta) + \mu_w \sin(\phi)\cos(\theta))]\Delta P_I \] \[ (\dot{\omega}_z)_{n+1} - (\dot{\omega}_z)_n = \frac{5}{2MR}(\mu_w \cos(\phi)\cos(\theta))\Delta P_I \]

Where \(\theta\) is a constant of the angle of cushion contact above ball centre with \(\sin(\theta) = 2/5\). \(\mu_s\) is the coefficient of sliding friction between the ball and table surface, and \(\mu_w\) is the coefficient of sliding friction between the ball and the cushion.

Energy and Restitution

The interaction is governed by the work done by the normal force at contact point I along the \(Z'\)-axis:

\[ W_{Z'}^I(P_I^{(n+1)}) = W_{Z'}^I(P_I^{(n)}) + \frac{\Delta P_I}{2} \left( \dot{z}'_I(P_I^{(n+1)}) + \dot{z}'_I(P_I^{(n)}) \right) \]

The compression phase iterates until \(\dot{v}_y \le 0\), and the restitution phase continues until the work done satisfies \(W_{Z'}^I \ge e_e^2 W_{\text{compression}}\). Some of the Mathavan equations not supplied by the paper were inferred to bridge gaps for a complete numerical solution.

Mathavan cushion model validation graphs
Validation graphs showing how simulated results match the published figures from the Mathavan paper. Click to see interactive diagrams.

To confirm the correctness of this implementation, we've recreated many of the figures from the paper in our interactive physics diagrams. These diagrams allow you to see the impulse and velocity changes across different incident angles and spins, proving consistency between the code and the theoretical model.

Experience the physics for yourself in the browser. Nine-ball, snooker, three-cushion, or practice mode.

Play now Practice Join lobby Leaderboard Source on GitHub