Virtual Solar System (formula for gravity in 3d)

Click For Summary
SUMMARY

The discussion focuses on implementing gravitational forces in a virtual solar system using Java3D. The user employs the formula F = G((m1*m2)/r^2) to calculate gravitational interactions between celestial bodies. They created a custom BigVector3d class to handle large distances and small gravitational forces, utilizing BigDecimal for precision. The implementation involves calculating acceleration based on mass interactions in a nested loop structure, although the user seeks clarification on deriving gravitational force components in three dimensions.

PREREQUISITES
  • Java3D for 3D graphics programming
  • BigDecimal for handling large numerical values
  • Understanding of Newton's law of universal gravitation
  • Vector mathematics for 3D space calculations
NEXT STEPS
  • Research "Java3D physics simulation techniques"
  • Learn about "BigDecimal performance optimization in Java"
  • Explore "3D vector mathematics for gravitational simulations"
  • Investigate "Newton's laws of motion in programming contexts"
USEFUL FOR

Game developers, physics simulation programmers, and anyone interested in implementing gravitational models in 3D environments.

Mipada
Messages
2
Reaction score
0
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:
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.)
[code]
vv = vv + av;//velocity vector = velocity vector + acceleration vector
lv = lv + vv;//location vector = location vector + velocity vector (for x, y, z)
[\code]

My main loop calls acceleration(Mass3d m2)
[code]
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
    }
}
[\code]
Then i try using this formula.
[code]
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.
m1.location.add(F/2);
m2.location.sub(F/2);
}
[\code]
How can i get the gravitational force for the x, y, z components?
 
Last edited:
Astronomy news on Phys.org
I found this formula.
Gravity formula.jpg

and tried to implement it as:
//FX
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
FX5=-9960977999999.9991344000
in meters per second. I'll check the numbers and get back to you.
 

Similar threads

  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 19 ·
Replies
19
Views
11K
  • · Replies 2 ·
Replies
2
Views
4K
Replies
18
Views
2K
Replies
15
Views
3K
Replies
2
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
5K