Game Development Reference

In-Depth Information

C * g * (t*t)/m);

V2.j = V1.j + (t/m)*C*V2.i - g*t;

// Calc. S2:

s2.i = s1.i + V1.i * t + (1.0f/2.0f) * (C/m * V2.j) * (t*t);

s2.j = s1.j + V1.j * t + (1.0f/2.0f) * ( ((C*V2.i) - m*g)/m ) * (t*t);

// Check for collision with ground (x-z plane)

if(s2.j <= 0)

return 2;

// Cut off the simulation if it's taking too long

// This is so the program does not get stuck in the while loop

if(time>60)

return 3;

return 0;

}

The heart of this simulation is the lines that calculate
V2
and
s2
, the instantaneous

velocity and position of the projectile, respectively. The equations of motion here come

from the 2D kinetic equations of motion including gravity, as discussed in
Chapter 4
,

combined with the following formula (shown earlier) for estimating the Magnus lift on

a spinning sphere:

F
L
= (2 π
2
ρ v r
4
ω) / (2 r)

You can see the effect of spin on the projectile's trajectory by providing the sample

program with different values for spin in revolutions per minute. The program converts

this to radians per second and stores this value in the variable
omega
. A positive spin

value indicates bottom spin such that the bottom of the sphere is spinning away from

you, while a negative spin indicates topspin, where the top of the ball spins away from

you. Bottom spin generates a positive lift force that will tend to extend the range of the

projectile, while topspin generates negative lift that will force the projectile toward the

ground, shortening its range. (Note that this example assumes that the spin axis is hor‐

izontal and perpendicular to the plane of the screen.)
Figure 6-13
illustrates this be‐

havior.