#### Archived

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

# 2D arc question

This topic is 6029 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

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...

##### Share on other sites
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

##### Share on other sites
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

##### Share on other sites
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.

##### Share on other sites
Yeah, sorry, I forgot to mention the whole basic vector thing

Got Slack?
Commander M

##### Share on other sites
Thank you so much! It works!

##### Share on other sites
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