Game Development Reference
In-Depth Information
might be required to provide a stable differential. Of particular note with central dif‐
ference forms is that periodic functions that are in sync with your time step may result
in zero slope. If the motion you are tracking is periodic, you should take care to avoid
a time step near the period of oscillation. This is called aliasing and is a problem with
all signal analysis, including computer graphics displays. Also, note that this cannot be
computed until at least three time steps have been stored. In our notation, t [ i −1] is the
center data point, t [ i −2] the backward value, and t [ i ] the forward value. The acceleration
function would therefore be as follows:
Vector findAcceleration (x[i-2], y[i-2], z[i-2], t[i-2], x[i-1], y[i-1], z[i-1],
t[i-1], x[i], y[i], z[i], t[i] ){
float ax, ay, az, h;
vector acceleration;
h = t[i]-t[i-1];
ax = (x[i] − 2*x[i-1] + x[i-2]) / h;
ay = (y[i] − 2*y[i-1] + y[i-2]) / h;
az = (z[i] − 2*z[i-1] + z[i-2]) / h;
return acceleration = {ax, ay, az};
}
Now, let's say that you are tracking a ball in someone's hand. Until he lets it go, the
velocity and acceleration we are calculating could change at any moment in any number
of ways. It is not until the user lets go of the ball that the physics we have discussed takes
over. Hence, you have to optically track it until he completes the throw. Once the ball
is released, the physics from the rest of this topic applies! You can then use the position
at time of release, the velocity vector, and the acceleration vector to plot its trajectory
in the game.