Started by Jul 14 2001 09:00 AM

,
7 replies to this topic

Posted 14 July 2001 - 09:00 AM

Hi. I''m terrible at physics, but recently I had a fairly nice idea about a game and I need physics to do it, so here it goes: I want to simulate a cannon (or something similar) that launches a bullet, and depending on the inicial velocity and the angle (the user chooses), it''ll fly in an arc-pattern and hit the ground. How can I do that? Code in Visual Basic or C/C++ is very appreciated!
Thanks in advance
"Nobody is perfect. I''''m a nobody. Therefore, I''''m perfect!" Nah, not really...

Posted 14 July 2001 - 10:49 AM

Well, here is a very simple way to implement this.

First, have two separate velocity components: xv for the horizontal velocity, and yv for the vertical velocity. Also add a constant to the mix, and call it g - this will be the acceleration of gravity (since the y-coordinate plane increases as it goes downwards on computer screens, make this a positive number).

Now, when a projectile flies through the air, the x velocity remains constant (assuming no air resistance/wind). Basically, every time you go through your main game loop, where you calculate new positions, do something like this:

yv = yv + g;

This updates the y velocity. To then update the positions, do something like this:

x = x + xv;

y = y + yv;

All that needs to be done to make this simulate a projectile is to give an object an initial velocity at some angle other than 90 degrees.

*Got Slack?*

Commander M

First, have two separate velocity components: xv for the horizontal velocity, and yv for the vertical velocity. Also add a constant to the mix, and call it g - this will be the acceleration of gravity (since the y-coordinate plane increases as it goes downwards on computer screens, make this a positive number).

Now, when a projectile flies through the air, the x velocity remains constant (assuming no air resistance/wind). Basically, every time you go through your main game loop, where you calculate new positions, do something like this:

yv = yv + g;

This updates the y velocity. To then update the positions, do something like this:

x = x + xv;

y = y + yv;

All that needs to be done to make this simulate a projectile is to give an object an initial velocity at some angle other than 90 degrees.

Commander M

Posted 14 July 2001 - 11:01 AM

Thanks! I got what you said, but I still don''t understand how the arc would be relative to an angle. Sorry if I''m being too annoying

Posted 14 July 2001 - 12:24 PM

When you have initial velocity v0 and angle alpha, then velocity

along x axis is vx = v0*sin(alpha) and along y axis

vy = v0*cos(alpha)+g*t. Then as CmndrM says,

x = x + vx;

vy = vy + g;

y = y + vy;

The sign of g depends on orientation of y axis. If y values increase from bottom to top then g is negative. Otherwise g is positive.

along x axis is vx = v0*sin(alpha) and along y axis

vy = v0*cos(alpha)+g*t. Then as CmndrM says,

x = x + vx;

vy = vy + g;

y = y + vy;

The sign of g depends on orientation of y axis. If y values increase from bottom to top then g is negative. Otherwise g is positive.

Posted 14 July 2001 - 01:48 PM

Yeah, sorry, I forgot to mention the whole basic vector thing

Vectors are your friend.

*Got Slack?*

Commander M

Vectors are your friend.

Commander M

Posted 16 July 2001 - 01:21 PM

quote:Original post by Grudzio

When you have initial velocity v0 and angle alpha, then velocity

along x axis is vx = v0*sin(alpha) and along y axis

vy = v0*cos(alpha)+g*t. Then as CmndrM says,

x = x + vx;

vy = vy + g;

y = y + vy;

The sign of g depends on orientation of y axis. If y values increase from bottom to top then g is negative. Otherwise g is positive.

Obviously the alignment of an arbitrary coordinate system is itself arbitrary. However, going by your earlier post, one correction is required above:

vx = v0*cos(alpha)

vy = v0*sin(alpha)

are the correct equations for initial components of velocity given a speed of projectile v0 and angle of inclination alpha (measured from the ground up).

Cheers,

Timkin