I wanted the equations of motion of a croquet ball as it slowed down so that I could model it on a virtual croquet lawn.

Moving balls at a constant velocity (which abruptly stop when they reach their destination) looks totally wrong. Using a square function looks better:

x = (1 - t/tfinal)2 * sfinal

(1)

However the aim was to use the assumed relationship where the ball encounters a constant deceleration due to a frictional force against the grass - see Lawns Speeds.

The modelling program moves balls according to variable time slices; the programmer knows the total distance they want the ball to move. Consequently we require a function of distance (s) versus time (t). The variables are defined in the footnote*.

Below are the calculations in fine detail to ensure that I have not made an error.

Newton's equation of motion:

v = u + a.t

(2)

hence at end of ball's motion t= tfinal and v = 0. Substitute to get tfinal in terms of u and a.

0 = u + a.tfinal

(3)

u =-a.tfinal

(4)

Integrating (2) wrt t yields:

s = u.t + ½.a.t2

(5)

Dropping in (4) for u gives:

s = -a.tfinal.t + ½.a.t2

(6)

Consider when s = sfinal, the ball has travelled its full distance, and t = tfinal

sfinal = -a.tfinal.tfinal + ½.a.tfinal2

(7)

sfinal = -a.tfinal2 + ½.a.tfinal2

(8)

Simplifying to:

sfinal = -½a.tfinal2

(9)

Here we can use (9) to calculate a given 'Plummers', e.g. a 12 Plummer lawn; that is it takes a ball 12 seconds (tfinal) to travel 35y (32.004m), sfinal. We will use yards to give acceleration in yards per second per second.

a= -2.sfinal / tfinal2 = -2 * 35 / 144 = -0.486 yards.sec-2

(10)

This is in agreement with lawn measurements.

Knowing this allows us to cast tfinal in terms of sfinal and a. We know sfinal and a is a property of the lawn related to 'Plummers'.

tfinal = √(-2.sfinal/a)

(11)

The negative within the square root is fine as we need the acceleration to be negative (slowing down) if there is ever going to be a tfinal.

From (4) we can now get u in terms of sfinal and a.

u =-a. √(-2.sfinal/a)

(12)

Substituting into (5) gives s solely in terms of t and constants:

s =-a. √(-2.sfinal/a).t + ½.a.t2

(13)

Taking the value of a = -0.468 (12 Plummers) from above and substituting in (13) yields sensible results:

Just to complete the exercise I need to produce code that gives the ball positions as it moves from (x1,y1) to (x2,y2) at variable times. The graphics routine draws an animation frame of the lawn, the computer goes away to do other tasks then returns to the graphics routine at non-regular times. The lawn is assumed to be flat, i.e. we are not following contours!

Calculate the distance the ball has to travel, sfinal, using Pythagoras:

sfinal = √((x2-x1)2+(y2-y1)2)

(14)

We need to select a speed of lawn - the Plummer value. For a given speed we can calculate the deceleration due to the friction of the grass, a, by (10):

Plummers
(sec)

a
(yds.sec-2)

Plummers
(sec)

a
yds.sec-2

5

-2.800

11

-0.579

5.5

-2.314

11.5

-0.529

6

-1.944

12

-0.486

6.5

-1.657

12.5

-0.448

7

-1.429

13

-0.414

7.5

-1.244

13.5

-0.384

8

-1.094

14

-0.357

8.5

-0.969

14.5

-0.333

9

-0.864

15

-0.311

9.5

-0.776

15.5

-0.291

10

-0.700

16

-0.273

10.5

-0.635

The ball is travelling at an angle to the x- and y-axes but for any distance, s, travelled by the ball it will have moved s/sfinal over the x interval, x1 to x2, ditto the y interval. Hence by congruent triangles:

st =-a. √(-2.sfinal/a).t + ½.a.t2

xt = x1 + st/sfinal * (x2-x1)

yt = y1 + st/sfinal * (y2-y1)

(15)

In the final programmes the acceleration is calculated in inches.sec-2 for convenience - yards are cumbersome to work with.