Hello,

I'll give you a little background information on the problem first. It might help.

I'm working on a video game actually. It's a 2d side view shooter. In it, there are bots (computer controlled players) that have perfect aim. They can hit (assuming it's in range) a target, accounting for the velocity of the target and the effect of gravity on the projectile (though most of the projectiles in the game will travel nearly straight paths, some will curve slightly).

Here's what I need. I need an equation that gives:

2 thetas (angle of firing) if the equation is solvable (if it's not solvable, then the bot is out of range, and just wont fire at all)

And here are the variables I know. These will be plugged into the equation I'm looking for:

--- Bot X, Y

--- Bot V (velocity vector)

--- Target X, Y

--- Target V

--- Acceleration of the bullet due to gravity

--- Firing speed of the bullet (Vo)

Just to be clear, there are three objects we're dealing with:

--- the bot (the thing that's firing the bullet)

--- the bullet (affected by gravity)

--- the target (has constant velocity)

Here's what I have so far. This works perfectly, EXCEPT for the fact that it doesn't account for the target's velocity. This is pseudocode, which I'm sure most of you should be able to understand.

____________________________________________________________________

Root = (FireSpeed^4)-(Gravity*( (Gravity*(TargetX^2)) + (2*TargetY*(FireSpeed^2)) ));

if (Root >= 0)

{

Angle1 = arctan(((FireSpeed^2)+sqrt(Root))/(Gravity*TargetX));

Angle2 = arctan(((FireSpeed^2)-sqrt(Root))/(Gravity*TargetX));

if (TargetX < 0)

{Angle1 += pi; Angle2 += pi;}

}

____________________________________________________________________

The equation I used there is straight from this wikipedia article:

http://en.wikipedia.org/wiki/Trajectory_of_a_projectile#Angle_.CE.B8_required_to_hit_coordinate_.28x.2Cy.29

If I'm not a complete moron, I'd say that the velocity of the bot doesn't even matter, since it could just be subtracted from the target's velocity (essentially doing the whole problem with a relative velocity). Correct me if I'm wrong, please. You can solve it using vectors, if you wish. Components would be fine as well.

Any help you can give is appreciated, even if it's just a push in the right direction. If you do explain something, please try to explain it thoroughly. I do understand basic (relative the crazy stuff you guys talk about here) physics, but I'm really stumped on this one.

Thanks,

Vince

I'll give you a little background information on the problem first. It might help.

I'm working on a video game actually. It's a 2d side view shooter. In it, there are bots (computer controlled players) that have perfect aim. They can hit (assuming it's in range) a target, accounting for the velocity of the target and the effect of gravity on the projectile (though most of the projectiles in the game will travel nearly straight paths, some will curve slightly).

Here's what I need. I need an equation that gives:

2 thetas (angle of firing) if the equation is solvable (if it's not solvable, then the bot is out of range, and just wont fire at all)

And here are the variables I know. These will be plugged into the equation I'm looking for:

--- Bot X, Y

--- Bot V (velocity vector)

--- Target X, Y

--- Target V

--- Acceleration of the bullet due to gravity

--- Firing speed of the bullet (Vo)

Just to be clear, there are three objects we're dealing with:

--- the bot (the thing that's firing the bullet)

--- the bullet (affected by gravity)

--- the target (has constant velocity)

Here's what I have so far. This works perfectly, EXCEPT for the fact that it doesn't account for the target's velocity. This is pseudocode, which I'm sure most of you should be able to understand.

____________________________________________________________________

Root = (FireSpeed^4)-(Gravity*( (Gravity*(TargetX^2)) + (2*TargetY*(FireSpeed^2)) ));

if (Root >= 0)

{

Angle1 = arctan(((FireSpeed^2)+sqrt(Root))/(Gravity*TargetX));

Angle2 = arctan(((FireSpeed^2)-sqrt(Root))/(Gravity*TargetX));

if (TargetX < 0)

{Angle1 += pi; Angle2 += pi;}

}

____________________________________________________________________

The equation I used there is straight from this wikipedia article:

http://en.wikipedia.org/wiki/Trajectory_of_a_projectile#Angle_.CE.B8_required_to_hit_coordinate_.28x.2Cy.29

If I'm not a complete moron, I'd say that the velocity of the bot doesn't even matter, since it could just be subtracted from the target's velocity (essentially doing the whole problem with a relative velocity). Correct me if I'm wrong, please. You can solve it using vectors, if you wish. Components would be fine as well.

Any help you can give is appreciated, even if it's just a push in the right direction. If you do explain something, please try to explain it thoroughly. I do understand basic (relative the crazy stuff you guys talk about here) physics, but I'm really stumped on this one.

Thanks,

Vince

Last edited: