Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Virtual Solar System (formula for gravity in 3d)

  1. Feb 22, 2015 #1
    I've made a virtual solar system in Java3d. I'm trying to implement the orbiting of planets and ships. I get the basic formula
    Code (Text):
    F = G((m1*m2)/r^2))[\code] and saw a discussion here about the formula in 3d but, I don't know how to read a letter with an arrow over it, lol.  Can someone help me with the details?
    Note:doubles can't seem to hold the big distances and the minute force of gravity at those distances.  I've ended up creating a BigVector3d class.  It holds BigDecimal numbers and allows me to use vectors (at least to hold 3d numbers in one object).  I'll post that for someone else to use.
    Fundamentally I'm doing this.
    (Sorry, I can't find the usual code formatting commands I've seen before.  And, I don't know if this is in the right forum.)
    vv = vv + av;//velocity vector = velocity vector + acceleration vector
    lv = lv + vv;//location vector = location vector + velocity vector (for x, y, z)

    My main loop calls acceleration(Mass3d m2)
    for (int j = 0;j < mass.size();j++){
        for (int i = j;i < mass.size();i++)//skip previously done masses
            mass.get(j).acceleration(mass.get(i));//for each other mass
    Then i try using this formula.
    acceleration(Mass3D m2){
    //F = -((G*m1*m2 * r.x)/r3) * r3
    //split force between two masses.  I don't think this part works at all.
    How can i get the gravitational force for the x, y, z components?
    Last edited: Feb 22, 2015
  2. jcsd
  3. Feb 23, 2015 #2
    I found this formula.
    Gravity formula.jpg
    and tried to implement it as:
    if (BD.get(X).doubleValue() > 0.000000009){//avoid div by 0 error
    FX = FX.add(BG);//big gravity
    FX = FX.multiply(BM);//big mass
    FX = FX.divide(BD.get(X).pow(2), mc);//big distance (x dist^2)
    FX = FX.multiply(BD.get(X));//big distance
    FX = FX.multiply(NEG1);//make negative
    else{//distance is 0, no force applied
    FX = new BigDecimal("0");
    Giving me the Earth pulling on a small ship in orbit, a value of
    in meters per second. I'll check the numbers and get back to you.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook