Define a parent 'body' object. It'll contain the basic physics to work as a moving object. In pseudopython (2.7) it would look a lot like:
def __init__(self, mass, velocity, position):
self.mass = mass
self.velocity = velocity
self.position = position
def move_step(self, time_scale):
#Basically, steps the object along the simulation.
self.position += self.velocity * time_scale
#Not actually that simple, but time_scale is used to change
#how accurate the simulation is.
Note that I'm just gonna assume that
position are defined as vectors, so that we can easily get their x, y, or z components, or get the magnitude and direction. Writing the vector object will be left up to the reader. Note that I didn't include any references to gravity or other objects. I've found that object-to-object interaction is annoying to deal with, so it would be better to simply have an object that handles the simulation.
Essentially, it loops through each
body in the simulation and calculates the forces on the
body. Since $\Sigma F = m*a$, you can get the $\Delta V$ of the object and apply it to that
body's velocity. After every
velocity is updated, the simulator loops through again and triggers their
Sounds good, right? All you need is to define all the gravities acting on an object, then sum them and update.
Not so fast. You gotta factor in relativity if you want increased accuracy. In general it doesn't change much, but when you get to the scale of the Sun and Mercury, it becomes noticeable. I'd implement a method (or a
lambda) that calculates Lorentz factors, and a conditional that chooses whether to use Newtonian or relativistic math based on some fancy factor.
Ok, so I can't do this one without making things simpler. Stuff where their sizes are massively different is easy.
larger.mass += smaller.mass; del smaller
After that, there's so much complexity that I'm not really sure how to proceed. In essence, objects need to break apart, and they need to have shape. That's hard to do. I'd recommend stealing a lot of stuff from the
Gotta go, sorry!