View difference between Paste ID: i8ta5J1V and N17apT47
SHOW: | | - or go back to the newest paste.
1
import matplotlib.pyplot as plt
2
import matplotlib.animation as anim
3
4
fig = plt.figure(figsize=(6,6))
5
ax = plt.axes(xlim=(-1,1), ylim=(-1,1))
6
7
x=[0.15,-0.15,0.9]
8
y=[0,0,0]
9
dx=[0,0,0]
10
dy=[0.8,-1.2,1.201]
11
M=[1.2,0.8]
12
dt=0.001
13
cx=[[],[],[]]
14
cy=[[],[],[]]
15
16
17
18
curve1,=ax.plot([],[],'r-')
19
curve2,=ax.plot([],[],'g-')
20
curve3,=ax.plot([],[],'b-')
21
22
obj1,=plt.plot([],[],'ro')
23
obj2,=plt.plot([],[],'go')
24
obj3,=plt.plot([],[],'bo')
25
26
def init():
27
    curve1.set_data([],[])
28
    curve2.set_data([],[])
29
    curve3.set_data([],[])
30
    obj1.set_data([],[])
31
    obj2.set_data([],[])
32
    obj3.set_data([],[])
33
    return curve1,curve2,curve3,obj1,obj2,obj3,
34
35
def f(t):
36
    global x,y,dx,dy,r
37
    for i in range(2):
38
        j=(i+1)%2
39
        dx[i]+=dt*M[j]*(x[j]-x[i])/((x[j]-x[i])**2+(y[j]-y[i])**2)**1.5
40
        dy[i]+=dt*M[j]*(y[j]-y[i])/((x[j]-x[i])**2+(y[j]-y[i])**2)**1.5
41
        dx[2]+=dt*M[i]*(x[i]-x[2])/((x[i]-x[2])**2+(y[i]-y[2])**2)**1.5
42
        dy[2]+=dt*M[i]*(y[i]-y[2])/((x[i]-x[2])**2+(y[i]-y[2])**2)**1.5
43
    for i in range(3):
44
        x[i]+=dt*dx[i]
45
        y[i]+=dt*dy[i]
46
        cx[i].append(x[i])
47
        cy[i].append(y[i])
48
    curve1.set_data(cx[0],cy[0])
49
    curve2.set_data(cx[1],cy[1])
50
    curve3.set_data(cx[2],cy[2])
51
    obj1.set_data(x[0],y[0])
52
    obj2.set_data(x[1],y[1])
53
    obj3.set_data(x[2],y[2])
54
    return curve1, curve2, curve3, obj1, obj2, obj3,
55
56
meh = anim.FuncAnimation(fig, f, init_func=init, interval=1, blit=True,save_count=(9000))
57
plt.show()
58
#video_writer=anim.FFMpegWriter(fps=150)
59
#meh.save('3_body.mp4',writer=video_writer)