In [13]:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from IPython.display import HTML
bmax = 1.0
freq = 60.0
w = 2 * np.pi * freq
num_frames = 120
t = np.linspace(0, 1/freq, num_frames, endpoint=False)
Baa = np.sin(w*t) * np.exp(1j*0)
Bbb = np.sin(w*t - 2*np.pi/3) * np.exp(1j*2*np.pi/3)
Bcc = np.sin(w*t + 2*np.pi/3) * np.exp(1j*4*np.pi/3)
Bnet = Baa + Bbb + Bcc
theta = np.linspace(0, 2*np.pi, 200)
circle = 1.5 * np.exp(1j*theta)
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_aspect('equal', adjustable='box')
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.grid(True)
ax.plot(np.real(circle), np.imag(circle))
line_baa, = ax.plot([], [], linewidth=2)
line_bbb, = ax.plot([], [], linewidth=2)
line_bcc, = ax.plot([], [], linewidth=2)
line_bnet, = ax.plot([], [], linewidth=3)
ax.set_title("Three-Phase Resultant Magnetic Field")
ax.set_xlabel("Real axis")
ax.set_ylabel("Imag axis")
def init():
for ln in (line_baa, line_bbb, line_bcc, line_bnet):
ln.set_data([], [])
return (line_baa, line_bbb, line_bcc, line_bnet)
def update(i):
line_baa.set_data([0, np.real(Baa[i])], [0, np.imag(Baa[i])])
line_bbb.set_data([0, np.real(Bbb[i])], [0, np.imag(Bbb[i])])
line_bcc.set_data([0, np.real(Bcc[i])], [0, np.imag(Bcc[i])])
line_bnet.set_data([0, np.real(Bnet[i])], [0, np.imag(Bnet[i])])
return (line_baa, line_bbb, line_bcc, line_bnet)
anim = FuncAnimation(fig, update, frames=num_frames, init_func=init,
interval=2000/num_frames, blit=True, repeat=True)
plt.close(fig)
HTML(anim.to_jshtml())
Out[13]: