Trajectory of a Ball

1. Aug 15, 2012

So I'm making a little basketball simulation game and I need a good way to calculate the path of a ball. I want to do this on a frame by frame basis where one frame lasts about 50 milliseconds. Each frame will store values for the state of the ball and then after applying some math, those values will be changed for the next frame.

So right now I have the horizontal and vertical positions, velocity, mass, and angle. I can add more variables if needed, these are just the first ones to come to my mind.

I think I can calculate the horizontal and vertical positions with something like this:
horizontal : newX = oldX + (oldVelocity * cos(angle))
vertical : newY = oldY + (oldVelocity * sin(angle))

If that is not a good way to do it, then let me know, it's just what I thought of with my limited physics knowledge.

I have no clue though how gravity and drag would factor in. I think the angle of the ball and the velocity should change from frame to frame, I just don't know how.

So, assuming a constant gravity, what would be a good way to make these calculations?

Thanks!

2. Aug 16, 2012

cepheid

Staff Emeritus

You can assume that gravity is a constant force that acts vertically downward. It causes an acceleration g, where g = 9.81 m/s2. In case you don't know, acceleration is just the rate of change (increase or decrease) of velocity, so this number is saying that gravity causes the downward velocity of the object to increase by 9.81 meters per second (m/s) every second. So the acceleration is the change in velocity divided by the time, which is 9.81 (m/s)/s = m/s2. Let's say the vertical position is denoted using the coordinate y. In the case of constant acceleration, the general equation for position vs. time is:

y = y0 + v0yt + (1/2)ayt2

where y0 is the initial vertical position (at t = 0), v0y is the initial vertical speed, and ay is the acceleration in the vertical direction. In this particular case, we have ay = -g, with the minus sign arising because the acceleration is downward. So the equation becomes:

y = y0 + v0yt - (1/2)gt2

The most general equation for the horizontal position, x, vs. time of the object under a constant acceleration would be:

x = x0 + v0xt + (1/2)axt2

HOWEVER, in this case, we have ax = 0. There is no horizontal component to the acceleration, because there are no forces acting in the x-direction, and Newton's Second Law says that a net force is required to cause an acceleration. Therefore, in this case, the equation reduces to:

x = x0 + vxt ​

where vx = v0x is the (constant) horizontal speed.

If v is the total speed, then the horizontal and vertical components are given, respectively, by the equations

vx = vcosθ
vy = vsinθ​

where θ is the angle of the ball's velocity vector, measured from the horizontal. Now, you mentioned that you knew the *initial* value for θ, but not the subsequent values. Well, you can figure them out if you need to, because vx is constant, and vy varies with time in a well-defined way. Remember that acceleration is just the rate of change of velocity. Therefore, the change in velocity is going to be the rate of change with time, multiplied by the total time elapsed. E.g. if my acceleration is a rate of1 m/s per second, then to figure out how much my speed would have increased (starting from 0) after 3 seconds, I'd just multiply the rate by the time interval: 1 (m/s)/s * 3 s = 3 m/s. This makes perfect sense. Since my speed increases by 1 m/s every second, after three seconds it will have gotten up to 3 m/s (assuming I started at 0). Stating this mathematically:

v = v0 + at​

The velocity at time t is the initial velocity plus the change in velocity, which, as I just explained, is the acceleration times the time interval. So, for our vertical velocity, this would become:

vy = v0y - gt​

3. Aug 16, 2012

haruspex

You also mentioned drag, which cepheid didn't cover. You can take the drag as a force proportional to the square of the speed, and acting in direct opposition to the direction of travel. This is makes things a bit more complicated, because now you can't treat the horizontal and vertical components of velocity as independent.

4. Aug 16, 2012

voko

Drag does not just make it a bit more complicated, it changes the game completely. Taking drag into account requires solving numerically the drag equation from frame to frame. Not to mention that an accurate drag coefficient must be known.

A realistic model would also need to take the spin of the ball into account, wind, etc. And we end up with the problem of external ballistics.

5. Aug 16, 2012