In [1]:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
## Para animação no Jupyter ##
# Se for utilizar o Spyder ou pela linha de comando, comente essa linha #
from IPython.display import HTML
In [4]:
h=0.1 #numero de intervalos
q=np.pi/3.0
v=0.3
n=200
g=-10
L=10
fig = plt.figure(figsize=(5,5))
#ax1 = fig.add_subplot(111)
ax1 = plt.axes(xlim=(-10, 10), ylim=(-10, 10))
line, = ax1.plot([], [], c='b')
pts, = ax1.plot([], [], 'o', c='b')
def calculate_q(q, v, n, g, L):
q_list = []
for k in np.arange(0,n):
q_next=q+h*v
v_next=v-h*((g/L)*np.sin(q_next))
q_list.append(q)
#ax1.scatter(q_next,v_next,c='b')
#ax2.plot([0, L*np.sin(q)], [0, L*np.cos(q)],c='b')
v=v_next
q=q_next
return q_list
q_list = calculate_q(q, v, n, g, L)
def init():
return line,pts
def animate(i):
line.set_data([0, L*np.sin(q_list[i])], [0, L*np.cos(q_list[i])])
pts.set_data(L*np.sin(q_list[i]), L*np.cos(q_list[i]))
fig.canvas.draw()
return line,pts
ani = animation.FuncAnimation(fig, animate, init_func=init,
frames=n, interval=100, blit=True)
## Para animação no Jupyter ##
# Se for utilizar o Spyder ou pela linha de comando, comente essa linha #
HTML(ani.to_html5_video())
Out[4]: