Sign in to follow this  
timbo317

Math / Programming Question

Recommended Posts

timbo317    122
Hey guys, I have (what should be) a very easy question. I am new to game design, but have been programming in JAVA for about 6 years now. I am createing a JAVA 3D asteroids game, using JME. I have a sphere set in space which represents Earth. My idea is to have "asteroids" created in various locations (3fVector), and then have the asteroids move toward earth. The player has to shoot the asteroids before they hit Earth. Simple enough, but I am having problems with the math involved in determining the "direction" these asteroids need to move in order to eventually hit earth. I am throwing spheres out in space in random places with the method asteroid.setLocalTranslation(x,x,x); So, how would I then determine the relative position to move to eventually collide with earth? Hope that makes sense, I am sure there is just some mathematic formula where you can take the 3fVector location of the asteroid, and the 3fVector location of the earth, and come up with a directional vector that the asteroid needs to be moved, but I am very lost on what that formula might be. Thanks guys!

Share this post


Link to post
Share on other sites
Captain P    1092
Getting a direction vector is simple vector addition/substraction. Substract the asteroids position from the earths position to get a vector that points from the asteroid to the earth. Then, change the length of this vector to the speed you want the asteroid to have and you've got your asteroids velocity.

Share this post


Link to post
Share on other sites
Crazyfool    307
Well, how I represent projectiles (and essentially we can treat your asteroids as arrows for that matter) is a little silly, but it works.

Essentially, I model a triangle and find the angle the triangle makes. Then I represent a growing circle and plot the projectiles position on that circle using the formula of:

x = cos(angle) * radius
y = sin(angle) * radius


To find the initial angle, I used:

tangent(angle) = opposite / adjacent
angle = arctan(opposite / adjacent)


To update the projectile (or asteroid), I calculate the time difference between last update call and the current time, then multiple that by the speed per second, and dividing by 1000 (since GetTickCount() Win32 API in windows returns milliseconds). I then treat that as my radius and add the values to the x and y of the projectile. Keep in mind that you can keep track of a growing radius, and just do something like this:

totalMove += nextMoveAmount;
x = cos(angle) * totalMove;
y = sin(angle) * totalMove;

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this