from visual import * ## deflate G to keep gravitational force from Sun constant G=6.673e-11 ## Force on a due to b def force(a,b): diff=b.pos-a.pos return G*b.mass*a.mass*norm(diff)/pow(diff.mag,2.0) ## Finds acceleration of a due to all objects b def totalacc(a,objlist): sum_acc=vector(0,0,0) for b in objlist: if (a!=b): sum_acc=sum_acc+force(a,b)/a.mass return sum_acc ## updates positions and track of each object def update(objlist, dt): for i in objlist: i.acc=totalacc(i,objlist) for i in objlist: i.pos=i.pos+dt*i.velocity+i.acc*dt*dt*0.5 i.track.append(pos=i.pos) for i in objlist: i.velocity=i.velocity+(i.acc+totalacc(i,objlist))*dt*0.5