14
14
import matplotlib .pyplot as plt
15
15
import scipy .integrate as integrate
16
16
import matplotlib .animation as animation
17
+ from collections import deque
17
18
18
19
G = 9.8 # acceleration due to gravity, in m/s^2
19
20
L1 = 1.0 # length of pendulum 1 in m
20
21
L2 = 1.0 # length of pendulum 2 in m
21
22
M1 = 1.0 # mass of pendulum 1 in kg
22
23
M2 = 1.0 # mass of pendulum 2 in kg
23
- t_stop = 5 # how many seconds to simulate
24
+ t_stop = 50 # how many seconds to simulate
25
+ history_len = 500 #how many trace points to display (trail history)
24
26
25
27
26
28
def derivs (state , t ):
@@ -47,8 +49,8 @@ def derivs(state, t):
47
49
48
50
return dydx
49
51
50
- # create a time array from 0..100 sampled at 0.05 second steps
51
- dt = 0.05
52
+ # create a time array from 0..t_stop sampled at 0.02 second steps
53
+ dt = 0.02
52
54
t = np .arange (0 , t_stop , dt )
53
55
54
56
# th1 and th2 are the initial angles (degrees)
@@ -71,22 +73,28 @@ def derivs(state, t):
71
73
y2 = - L2 * cos (y [:, 2 ]) + y1
72
74
73
75
fig = plt .figure (figsize = (5 , 4 ))
74
- ax = fig .add_subplot (autoscale_on = False , xlim = (- 2 , 2 ) , ylim = (- 2 , 1 ))
76
+ ax = fig .add_subplot (autoscale_on = False , xlim = (- ( L1 + L2 ), ( L1 + L2 )) , ylim = (- ( L1 + L2 ) , 1 ))
75
77
ax .set_aspect ('equal' )
76
78
ax .grid ()
77
79
78
80
line , = ax .plot ([], [], 'o-' , lw = 2 )
81
+ trace , = ax .plot ([], [], ',-' , lw = 1 )
79
82
time_template = 'time = %.1fs'
80
83
time_text = ax .text (0.05 , 0.9 , '' , transform = ax .transAxes )
84
+ history_x , history_y = deque (maxlen = history_len ), deque (maxlen = history_len )
81
85
82
86
83
87
def animate (i ):
84
88
thisx = [0 , x1 [i ], x2 [i ]]
85
89
thisy = [0 , y1 [i ], y2 [i ]]
86
90
91
+ history_x .appendleft (thisx [2 ])
92
+ history_y .appendleft (thisy [2 ])
93
+
87
94
line .set_data (thisx , thisy )
95
+ trace .set_data (history_x , history_y )
88
96
time_text .set_text (time_template % (i * dt ))
89
- return line , time_text
97
+ return line , trace , time_text
90
98
91
99
92
100
ani = animation .FuncAnimation (
0 commit comments