Ejemplo n.º 1
0
parser.add_argument('--smooth', dest='smooth', type=int, default=0)
parser.add_argument('--tscale', dest='tscale', type=float, default=1)
parser.add_argument('--start', dest='start', type=int, default=0)
parser.add_argument('--stop', dest='stop', type=int, default=0)
parser.add_argument('--f', dest='fname', type=str, default="")

args = parser.parse_args()

smooth = args.smooth
start = args.start
stop = args.stop
tscale = max(args.tscale,1)

xs = []
distances = []
for time, _, dlist in OrbitData.read(sys.stdin):
	xs.append(time)
	distances.append(dlist)

print "Read all data"

distances = numpy.transpose(distances)

print "Transposed distance arrays"

def movingaverage(interval, window_size):
	window = numpy.ones(int(window_size))/float(window_size)
	return numpy.convolve(interval, window, 'same')

if smooth > 1:
	avrgdt = sum(b-a for a,b in zip(xs,xs[1:]))/(len(xs)-1)
Ejemplo n.º 2
0
from itertools import combinations
import matplotlib.pyplot as plt
from mpmath import cbrt
import sys
import OrbitData

times = []
masses = None
positions = []
for time, bodies, _ in OrbitData.read(sys.stdin):
	times.append(time)
	positions.append(map(lambda b: b[1:3], bodies))
	masses = map(lambda b: b[0], bodies)

scale = min(masses)
masses = [12*cbrt(m/scale)**2 for m in masses]

print "Read all data"

def update_plot(i, scat, pos, mass):
	scat.set_offsets(pos[i])
	scat.set_sizes(mass)
	return scat

minx = min(map(lambda p: min(map(lambda c: c[0], p)), positions))
maxx = max(map(lambda p: max(map(lambda c: c[0], p)), positions))
miny = min(map(lambda p: min(map(lambda c: c[1], p)), positions))
maxy = max(map(lambda p: max(map(lambda c: c[1], p)), positions))

xbuf = (maxx - minx)/10
maxx += xbuf
Ejemplo n.º 3
0
			#G is accounted for in vdt
			p.ax -= b.mass * dx / h3
			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: