ENG New site

Advanced search

[ New messages · Forum rules · Members ]
  • Page 1 of 1
  • 1
n-body approximation
keebusDate: Saturday, 31.03.2012, 19:16 | Message # 1
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
Hello all,

I was wondering, can you point me to the solution to the n-body problem used by SpaceEngine? I guess an exact calculation is not made as (as far as I know) there is no known solution or it is too computationally expensive.

I'd be glad if you could give me some hints. I was (perhaps a little naively) considering approximating it with a collection of 2-body approximation. I know it would be a potentially inexact solution, but I'm only interested on plausible, not too incorrect solutions.

Thank you very much.

p.s.: I'd be glad if you could also point me to a way to calculate bodies coordinates in any, absolute time t, giving we know all body parametes (initial position and velocity, as well as "the entity orbiting around to").
 
SpaceEngineerDate: Sunday, 01.04.2012, 01:58 | Message # 2
Author of Space Engine
Group: Administrators
Russian Federation
Messages: 4800
Status: Offline
SE does not use N-body simulation - it is computationally expensive and impossible due to adjustable timerate. This can be compared to avi file with no keyframes: if you rewind player to some point, you should wait until codec builds all the frames from the beginning of the movie to your point. So if I would use N-body simulation, I should define initial coordinates and velocities for every body in system, for 1 a.d. for example, and then run the simulation until time reaches the player's current time. And I should note reduced accuracy, because this may lead to a different result for different players. Such calculation may take hours depending on PC speed.

Because of that, in SE I use analytic solution for two-body problem - this is well-known Kepler equations. I can emulate only stable periodic orbits, but almost all systems in universe are stable. These solution do "calculate bodies coordinates in any, absolute time t, giving we know all body parametes (initial position and velocity, as well as 'the entity orbiting around to')." So no expensive calculations performed. The accuracy is perfect for game purposes.

However, for spaceships I should use the first approach, so time traveling becomes almost impossible. It is good that in a multiplayer game time travel will be already disabled.

*





 
keebusDate: Sunday, 01.04.2012, 10:52 | Message # 3
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
Hello SpaceEngineer,

thank you for your quick answer. I'm glad to see I've come to the same solutiouon you found. Just one little note: you said you naturally keep a reference to the object you're orbiting about. This is pretty intuitive, what I'm considering, is a multiple stars system or a planet with several moons where for example one of them has enough mass to influence it's primary planet orbit.

So what I've finally come to is the following: suppose we're generating a planet with its moons. See if one of the moons has "enough" mass, and if so, convert the pair planet-high mass moon to a 2-body simulation (thus calculating the barycenter) and let other moons orbit around this barycenter.

The same would happen for a triple star system: I would take the two most massive stars, couple them into a 2-body sim, and let lightest start orbit around one of the two or around the barycenter of the previous 2-body sim.

Does it sound correct?
 
SpaceEngineerDate: Sunday, 01.04.2012, 11:43 | Message # 4
Author of Space Engine
Group: Administrators
Russian Federation
Messages: 4800
Status: Offline
Yes, I use the same in SE. If senond body is massive enough, the barycenter is calculated (with summary mass of these two bodies), and two bodies run start orbiting it (with correctly computed orbital elements - the same peroids, inclinations, ascenging nodes, with argument of pericenter differs by 180°, and the semimajor axes proportionally to their mass ratio). It is possible to third body to have stablo orbit in this system - very close to any of these two bodies, or orbiting the barycenter far enough (3-5 times farther than second body's semimajor axis).




 
keebusDate: Sunday, 01.04.2012, 12:17 | Message # 5
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
Oh thank you very much. As one last effort, I'm struggling finding some good reference on how to calculate these orbital characteristiccs, the ones you just mentioned: period, inclination, ascending node, pericenter and most importantly semimajor axis. Can you point me to some good reference?

Thank you very much for your help.
 
SpaceEngineerDate: Sunday, 01.04.2012, 12:37 | Message # 6
Author of Space Engine
Group: Administrators
Russian Federation
Messages: 4800
Status: Offline
I do not use any reference. Maybe because I am astronomer, and know all it from student days smile All you need is Kepler's laws and definition of orbital elements. I generate all angular elements randomly, but taking into account complanarness of orbits. Semimajor axis I generate using geometric progression with small random offset, then calculate period using sun mass and Kepler's laws. In render stage, I calculate position of a planet relative to its parent using Kepler's equation and rotation matrix, calculated from angular elements. Coordinates relative system's center is obtained by recursуe through system's heirarchy.




 
keebusDate: Sunday, 01.04.2012, 23:59 | Message # 7
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
I've been reading all the pages I found on Wikipedia, including the ones you pointed me to.

I'm still missing the final point though, that is, given the 6 (constant) paramaters that exactly describe an elliptic orbit, what is the final function r(t) (r is the displacement vector from the sun to the planet).

Could you kindly help me out? smile
 
SpaceEngineerDate: Monday, 02.04.2012, 01:10 | Message # 8
Author of Space Engine
Group: Administrators
Russian Federation
Messages: 4800
Status: Offline
You can spy on it in the Celestia source code smile I use my own function, but it's a pretty match with Celestia's (obviously).

*





 
keebusDate: Monday, 02.04.2012, 10:43 | Message # 9
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
Oh thank you! This is a very neat idea biggrin Btw I think I'm getting close to it smile I'll write back what I realize just to get an astronomer "OK" smile (I'm a computer engineer).
 
keebusDate: Monday, 02.04.2012, 12:41 | Message # 10
Observer
Group: Newbies
Italy
Messages: 6
Status: Offline
Thanks a lot! It worked!

Btw I'm happy to see that I was actually correct. The whole problem reduces to finding the eccentric anomaly some way. My doubts were like "Do I REALLY have to compute it numerically? Isn't there any maybe inexhact but fast way to compute E?"

As I can see, numerical, iterative procedures are used, so alright, I feel fine now smile

Thanks a lot for your huge help. So basically, now that I have a body orbiting around a fixed point, to have a pair of bodies orbiting around a barycenter all I have to do is give them absolutely same 6 parameters only changing the Mean Anomaly (i consider epoch = 0) out of phase of 180°. A final confirmation? smile
 
SpaceEngineerDate: Monday, 02.04.2012, 21:01 | Message # 11
Author of Space Engine
Group: Administrators
Russian Federation
Messages: 4800
Status: Offline
Quote (keebus)
"Do I REALLY have to compute it numerically? Isn't there any maybe inexhact but fast way to compute E?"

Kepler's equation does not have an analytical solution, so numerical iterations are the only way to solve it. However, it's very fast - you need just 3-5 iterations for almost a circular orbit and 10-20 iterations for orbits with e < 0.2. Some advanced iteration schemes are used for high eccentic orbits.

Quote (keebus)
So basically, now that I have a body orbiting around a fixed point, to have a pair of bodies orbiting around a barycenter all I have to do is give them absolutely same 6 parameters only changing the Mean Anomaly (i consider epoch = 0) out of phase of 180°. A final confirmation?

Confirmed smile Just do a visualisation and look at behaviour of a planets.

*





 
  • Page 1 of 1
  • 1
Search: