need math help

BlitzPlus Forums/BlitzPlus Programming/need math help

Ok, im sure this is easy but i didnt pay attention in math too much :)


ok currently i have a ship flying around, inertia and all works fine. What im trying to add is a planet in the center that has a gravatational effect ont he ships. Can anyone help me out with the equations i need to use to find out how much in each direction i need to change the ships x/y?

Hopefully that makes sense :) ill draw a picture if noone understands.

OK first you have to work out the distance of the centre of the spaceship from the centre of the planet. Use pythagorus for this e.g. radius = squareroot(x*x + y*y).

Then give the planet a Mass (M), make up a gravitational constant G, then the gravitational acceleration on the ship is (G*M)/(radius*radius). This assumes that the ship has no (or negligable) mass.

Now you have the gravitational acceleration it must be applied to the x and y intertia of your ship. But NOT just added on, it must be added on proportially to x and y. I think you can use Pythagorus for this too. You need to work out the ratio of x and y to the radius and multiply the gravitational acceleration by the ratio (which will be less than or equal to 1) . You might even be able to use sin and cos somehow (check this forum for a recent post on intertia EDIT: http://www.blitzbasic.com/Community/posts.php?topic=45268 but you need to know the angle so not much good!), but I have to go shopping now (cop out).

Good luck

I assume you're doing something like this for inertia:
x#=x#+vx#
y#=y#+vy#
x,y is ship positions, vx,vy is ship speed in x and y directions.

Any force on the ship doesn't directly change it position, it changes its speed. For gravity, the force falls off as 1/(r^2) , where r is the distance between your ship and the planet centre.

r_squared=(x-planet\x)^2 + (y-planet\y)^2
force#=constant/r_squared

The force is pointing in a direction from the ship towards the centre of the planet. The force in x and y directions is:
fx#=force*(planet\x-x)/r
fy#=force*(planet\y-y)/r

(r=sqrt(r_squared))

I THINK that lot's right - you'll have to try it - may have some wrong. You'll get problems if r goes to zero - so keep your ship away from the centre of the planet or put a case in that skips the force if r is zero or v small. You could try a force of 1/r oor 1/sqrt(r) - not technically correct but whatever gives the game the best feel. You will have to play with the size of 'constant' aswell.

ok i think i can go from there, well see :) thanks