This topic is now archived and is closed to further replies.



Recommended Posts

Hi! Im working on a small worms clone and what i need is a formula that calculates the way of a bullet in air... need to draw its path through air... My different variables are: Power: 0 - 100 Angle: 0 - 180 Does any of you have any examples or references? Thanks. -Robert-

Share this post

Link to post
Share on other sites
Well, this is a pretty simple generalization of projectile motion, but here goes:

Basically, we''re talking 2-Dimensional motion. One motion in the y direction, and another in the x. Assuming there is no wind or air resistence, the x velocity shall remain constant throughout. However, because of gravity, the y velocity will constantly increase in the negative y direction.

Basically, you give your yv (y velocity) some initial positive value, and set g (gravitational acceleration) to whatever arbitrary value you want. To calculate the new yv, you would simply do this:

yv = yv + g;

To update the positions:

y = y + yv;
x = x + xv;

I hope this helped a little.

Free Speech, Free Sklyarov
Fight the unconstitutional DMCA.

Commander M

Share this post

Link to post
Share on other sites
Okay, let''s asume that your "power" unit creates a velocity of 1 unit per second.

If you are working in a 2-D plane, your 2 initial velocity components are going to be like this:

ViX = Power * cos(Angle)
ViY = Power * sin(Angle)

Then, you just use the simple projectile motion formulas from calc:

X = X + (ViX * time)
Y = Y + (ViY * time) + (.5 * Gravity) * (time * time)

Share this post

Link to post
Share on other sites

I can get it to fire a ''*'' through the air but the projectile just starts moving downwards as soon it leaves its start position. Well it should be moving upwards a while and then start to move down... or....

*What should i have as my gravity? Tried with .6.
*Should i use ordinary angles or radians, if radians how do i calculate it?
*What about time? Should i increase it with, say +.6 every frame or more?


Share this post

Link to post
Share on other sites
The c++ trig functions expect radians, not degrees. To convert angle theta into radians:

radians = theta * PI / 180;

I would make that into a macro since you''ll probably find it more intuitive to work with angles than radians. And precalculate PI / 180 for an easy optimization.

Remember that on a computer Y coordinates generally increase towards the bottom of the screen. That may be causing your projectile problem. And btw on earth g == -9.8

If you''re going to add a specific amount to the time every frame it should be a lot smaller than 0.6 seconds, or your projectiles are going to move like lightning. Some other ways to update the time are to actually calculate the time elapsed between frames and use that amount, or have your program time itself and only update the physics after a specific period of time, maybe every 0.1 seconds

Share this post

Link to post
Share on other sites