Soccer ball motion approximation,
Members - Reputation: 122
Posted 27 July 2001 - 02:47 AM
Members - Reputation: 351
Posted 27 July 2001 - 05:13 AM
First you need to only calculate cos(angle) and sin(angle) once per kick. You may be able to calculate them together, e.g. some APIs provide a SinCos function which works them both out at once.
Second you do not need to use exp to do drag. Exp arises when you try to write down a precise formula for the position at all times, as it''s the solution to an equation of motion of a particle with linear drag.
But you can intead use numerical techniques. The first equation can be derived from the equation of motion
-- = -Kv/M
where v is the velocity. This can be used to update the horizontal velocity u with the approximation formula
u = u - (K * u / M) * t
where t is the time step between updates.
x = x + u * t
to update x.
Similarly for the vertical motion use
v = v - (K * v / M + G) * t
z = z + v * t
Because u, v, x and z are calculated from previous values they need to be initialised, and for your situation this would be
u = V * cos(angle)
v = V * sin(angle)
x = 0
z = h0
where ''V'' is the launch speed.
It''s important to note that these numerical methods are approximations: over even a short time step u and v are changing, so calculations done with them are incorrect by the end of the time step.
It is therefore important that the time step is as small as possible, and so that updates are done as often as possible. This is usually one of the key decisaions in designing a simulation, and it''s difficult to give precise recommendations, but it''s often best to use an fixed update rate different from the frame rate if it can vary.
Posted 03 August 2001 - 09:11 AM
Velocity in the non-vertical directions (the directions not effected by gravity) is virtually constant while the ball is in the air. Air resistance will have some effect, but if you need to speed it up more, compute the horizontal velocity once.
Air resistance will be almost negligable.
Also, mass of an object does not effect an object once it is in the air.
While these will cause your code to be inaccurate, the inaccuracies will be inconsequential for a soccer game. They will speed it up a little bit though, which is more important than being 100% accurate.