Пример #1
0
			p.ay -= b.mass * dy / h3

			b.ax += p.mass * dx / h3
			b.ay += p.mass * dy / h3

		#Update velocity & position
		p.vx += p.ax*vdt
		p.vy += p.ay*vdt
		p.x += p.vx*dt
		p.y += p.vy*dt
		p.ax = 0
		p.ay = 0

reader = OrbitData.read(sys.stdin)
time, b_info, _ = reader.next()

minmass = min(map(lambda t: t[0], b_info))
G = G*minmass

bodies = [Body(data[0]/minmass, *data[1:]) for data in b_info]

timestep = args.step
output_interval = args.out
end = args.end

step(bodies, timestep, True)
for s in xrange(time, end, timestep):
	step(bodies, timestep, False)
	if s % output_interval == 0:
		OrbitData.write(sys.stdout, s, bodies)
Пример #2
0
class Body():
	def __init__(self,mass,x,y,vx,vy):
		self.mass = mass
		self.x=x
		self.y=y
		self.vx=vx
		self.vy=vy

		
G = mpf(6.67384e-11)
R = mpf(2591111127.56519)
M = mpf(1.59128e29)

def calcInitial(mass, dist, angle):
	x = cos(angle)*dist
	y = sin(angle)*dist
	speed = sqrt(G*M/dist)
	vy = cos(angle)*speed
	vx = -sin(angle)*speed
	return Body(mass, x, y, vx, vy)

Sun = Body(M,0,0,0,0)

for i in xrange(1,10):
	Solia = calcInitial(5.972e24,R+i*5e7/4,radians(0))
	Moon = calcInitial(5.972e24/4,R-i*5e7,radians(300))
	with open("Solia%d.in"%(i,), "w") as f:
		OrbitData.write(f, 0, [Sun, Solia, Moon])
	print "nbody.exe -o 2500 -t 1e8 < Solia%d.in > Solia%d.out" % (i,i)
	print "python GraphOrbits.py --smooth 2543000 --f Solia%d.png < Solia%d.out" % (i,i)