Very interesting indeed.
I changed your script a bit to make it more easy to understand and follow
I changed your script a bit to make it more easy to understand and follow
from visual import * # I HATE this myuniv = display(range=vector(7*10**12,7*10**12,7*10**12)) G = 6.674*10**-11 #Gravitational constant # define objects sun = {'r':9.9*10**10, 'mass':1.989*10**30, 'pos':vector(0,0,0), 'vel':vector(0,0,0), 'acc':vector(0,0,0), 'color':color.yellow} planets = (('mercury', {'r':2.44*10**6, 'mass':3.285*10**23,'pos':vector(5.791*10**10,0,0), 'vel': vector(0,4.87*10**4,0), 'acc':vector(0,0,0), 'color':color.red}), ('venus', {'r':6.052*10**6, 'mass':4.867*10**24, 'pos':vector(1.082*10**11,0,0), 'vel':vector(0,3.502*10**4,0), 'acc':vector(0,0,0), 'color':color.yellow}), # I added color here ('earth', {'r':6.371*10**6, 'mass':5.972*10**24, 'pos':vector(1.496*10**11,0,0), 'vel':vector(0,2.98*10**4,0), 'acc':vector(0,0,0), 'color':color.green}), ('mars', {'r':3.39*10**6, 'mass':6.39*10**23, 'pos':vector(2.279*10**11,0,0), 'vel':vector(0,2.401*10**4,0), 'acc':vector(0,0,0), 'color':color.red}), ('jupiter', {'r':6.99*10**7, 'mass':1.898*10**27, 'pos':vector(7.785*10**11,0,0), 'vel':vector(0,1.307*10**4,0), 'acc':vector(0,0,0), 'color':color.blue}), ('saturn', {'r':5.823*10**7, 'mass':5.68*10**26, 'pos':vector(1.429*10**12,0,0), 'vel':vector(0,9.69*10**3,0), 'acc':vector(0,0,0), 'color':color.yellow}), ('uranus', {'r':2.536*10**7, 'mass':8.68*10**25, 'pos':vector(2.871*10**12,0,0), 'vel':vector(0,6.81*10**3,0), 'acc':vector(0,0,0), 'color':color.cyan}), ('neptune', {'r':2.462*10**7, 'mass':1.024*10**26, 'pos':vector(4.498*10**12,0,00), 'vel':vector(0,5.43*10**3,0), 'acc':vector(0,0,0), 'color':color.blue})) # I added color here #visualize objects solar_system = {'sun': sphere(pos=sun['pos'], radius=sun['r'], color=sun['color'], make_trail=True)} for name, planet in planets: solar_system[name] = sphere(pos=planet['pos'], radius=planet['r'], color=planet['color'], make_trail=True) t = 0.0 dt = 150000 while True: for name, planet in planets: rate(1000000) t=t+dt r = sun['pos'] - planet['pos'] # also possible r = solar_system['sun'].pos - solar_system[name].pos Fnet= ((G*sun['mass']*planet['mass'])/(mag(r)**2))* norm(r) #Calculating the force of gravity from the sun planet['acc'] = Fnet/planet['mass'] planet['vel'] += planet['acc']*dt planet['pos'] += planet['vel']*dt solar_system[name].pos = planet['pos']In order to preserve the order of the planets, I used tuple of tuples to define the planets, but you can also use OrderedDict from collections.