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
22
+ L = L1 + L2 # maximal length of the combined pendulum
21
23
M1 = 1.0 # mass of pendulum 1 in kg
22
24
M2 = 1.0 # mass of pendulum 2 in kg
23
25
t_stop = 5 # how many seconds to simulate
26
+ history_len = 500 # how many trajectory points to display
24
27
25
28
26
29
def derivs (state , t ):
@@ -47,8 +50,8 @@ def derivs(state, t):
47
50
48
51
return dydx
49
52
50
- # create a time array from 0..100 sampled at 0.05 second steps
51
- dt = 0.05
53
+ # create a time array from 0..t_stop sampled at 0.02 second steps
54
+ dt = 0.02
52
55
t = np .arange (0 , t_stop , dt )
53
56
54
57
# th1 and th2 are the initial angles (degrees)
@@ -71,22 +74,32 @@ def derivs(state, t):
71
74
y2 = - L2 * cos (y [:, 2 ]) + y1
72
75
73
76
fig = plt .figure (figsize = (5 , 4 ))
74
- ax = fig .add_subplot (autoscale_on = False , xlim = (- 2 , 2 ), ylim = (- 2 , 1 ))
77
+ ax = fig .add_subplot (autoscale_on = False , xlim = (- L , L ), ylim = (- L , 1. ))
75
78
ax .set_aspect ('equal' )
76
79
ax .grid ()
77
80
78
81
line , = ax .plot ([], [], 'o-' , lw = 2 )
82
+ trace , = ax .plot ([], [], ',-' , lw = 1 )
79
83
time_template = 'time = %.1fs'
80
84
time_text = ax .text (0.05 , 0.9 , '' , transform = ax .transAxes )
85
+ history_x , history_y = deque (maxlen = history_len ), deque (maxlen = history_len )
81
86
82
87
83
88
def animate (i ):
84
89
thisx = [0 , x1 [i ], x2 [i ]]
85
90
thisy = [0 , y1 [i ], y2 [i ]]
86
91
92
+ if i == 0 :
93
+ history_x .clear ()
94
+ history_y .clear ()
95
+
96
+ history_x .appendleft (thisx [2 ])
97
+ history_y .appendleft (thisy [2 ])
98
+
87
99
line .set_data (thisx , thisy )
100
+ trace .set_data (history_x , history_y )
88
101
time_text .set_text (time_template % (i * dt ))
89
- return line , time_text
102
+ return line , trace , time_text
90
103
91
104
92
105
ani = animation .FuncAnimation (
0 commit comments