brown/particles.py

64 lines
1.7 KiB
Python
Raw Normal View History

2019-07-12 19:52:12 +00:00
from brown.interaction import UFuncWrapper
from brown.brown import BrownIterator
import numpy as np
from collections import deque
from copy import copy
import matplotlib.pyplot as plt
import matplotlib.animation as ani
from coefficients import c
2019-07-12 19:52:12 +00:00
#force_function = UFuncWrapper(0, c)
#interaction2D = UFuncWrapper(1, c)
2019-07-13 13:20:50 +00:00
borders_x = [-10, 10]
borders_y = [-10, 10]
n_particles = 600
2019-07-13 13:20:50 +00:00
frames = 100
spawn_restriction = 1.1
2019-07-13 13:20:50 +00:00
dt = 0.001
2019-07-13 12:31:37 +00:00
c[-1] = dt
2019-07-12 19:52:12 +00:00
x_coords = np.random.uniform(borders_x[0] / spawn_restriction, borders_x[1] / spawn_restriction, n_particles).astype(np.float16)
y_coords = np.random.uniform(borders_y[0] / spawn_restriction, borders_y[1] / spawn_restriction, n_particles).astype(np.float16)
2019-07-12 19:52:12 +00:00
x_momenta = np.zeros(n_particles, dtype=np.float16)
y_momenta = np.zeros(n_particles, dtype=np.float16)
fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(*borders_x)
ax.set_xticks([])
ax.set_ylim(*borders_y)
ax.set_yticks([])
plot, = ax.plot(x_coords, y_coords, "b.")
center_of_mass, = ax.plot(x_coords.mean(), y_coords.mean(), "r-")
center_of_mass_history_x = deque([x_coords.mean()])
center_of_mass_history_y = deque([y_coords.mean()])
brown = BrownIterator(-1, c
, x_coords, y_coords
, y_momenta, y_momenta
2019-07-13 13:20:50 +00:00
, borders_x, borders_y
#, [], []
2019-07-12 19:52:12 +00:00
, border_dampening=1
2019-07-13 12:31:37 +00:00
, dt=dt)
2019-07-12 19:52:12 +00:00
u = iter(brown)
def update(i):
data = next(u)
center_of_mass_history_x.append(x_coords.mean())
center_of_mass_history_y.append(y_coords.mean())
plot.set_data(*data)
center_of_mass.set_data(center_of_mass_history_x, center_of_mass_history_y)
animation = ani.FuncAnimation(fig, update, range(frames), interval=1)
plt.show()
2019-07-13 12:31:37 +00:00
#animation.save("animation.mp4", fps=30)