• Advertisement

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.

If you intended to correct an error in the post then please contact us.

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 this post


Link to post
Share on other sites
Advertisement
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 this post


Link to post
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 this post


Link to post
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 this post


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

Vectors are your friend.


Got Slack?
Commander M

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

  • Advertisement