Orbits

Demonstration that an ellipse can be constructed from two circular motions of same frequency but oposite rotations.

Can be used as a model for transmission line theory.

Animation


In [19]:
# JSAnimation import available at https://github.com/jakevdp/JSAnimation
from JSAnimation import IPython_display
from matplotlib import animation



Gamma0 = .5*exp(pi/4*1j)


a0 = 1
b0 = Gamma0*a0

theta = linspace(0,2*pi,101)
a =  a0*exp(1j*theta)
b =  b0*exp(-1j*theta)
v = a+b
i = (a-b)

fig,axs = subplots(1,2 , sharey=True,
                   subplot_kw=dict(xlim=(-3, 3),ylim=(-3, 3)),
                   figsize=(8,3.8))
ax, ax2 = axs
ax2.set_xlim(theta[0], theta[-1])

a_line, = ax.plot([], [], 'o-',lw=2, color ='b', label = 'a')
b_line, = ax.plot([], [], 'o-',lw=2, color='r', label = r'$\pm$b')
c_line, = ax.plot([], [], 'o-',lw=2, color='r',label = None)
v_line, = ax.plot([], [], 'o-',lw=2, color='g', label= 'v')
i_line, = ax.plot([], [], 'o-',lw=2, color='y', label = 'i')

a_line2, = ax2.plot([], [], 'o-',lw=2, color ='b', label = 'a')
b_line2, = ax2.plot([], [], 'o-',lw=2, color='r', label = r'$\pm$b')
c_line2, = ax2.plot([], [], 'o-',lw=2, color='r',label = None)
v_line2, = ax2.plot([], [], 'o-',lw=2, color='g', label= 'v')
i_line2, = ax2.plot([], [], 'o-',lw=2, color='y', label = 'i')

primary, = ax.plot(a.real, a.imag)
secondary, = ax.plot(a0+b.real, a0+b.imag)
result_v,= ax.plot(v.real, v.imag)
result_i,= ax.plot(i.real, i.imag)
ax.legend()

primary2, = ax2.plot(theta, a.imag)
secondary2, = ax2.plot(theta,b.imag)
result_v2,= ax2.plot(theta, v.imag)
result_i2,= ax2.plot(theta, i.imag)
ax2.legend()
global lines
lines = [a_line,b_line,c_line, v_line,i_line]

def init():
    
    global lines
    [k.set_data([], []) for k in lines]
    plot()
    legend()
    
    return lines,

def animate(k):
    global lines
    a_line.set_data([0,a[k].real],[0,a[k].imag])
    b_line.set_data([a[k].real,v[k].real],[a[k].imag,v[k].imag])
    c_line.set_data([a[k].real,i[k].real],[a[k].imag,i[k].imag])
    v_line.set_data([0,v[k].real],[0,v[k].imag])
    i_line.set_data([0,i[k].real],[0,i[k].imag])
    
    a_line2.set_data([theta[k], a[k].imag])
    b_line2.set_data([theta[k], b[k].imag])
    #c_line2.set_data([a[k].real,i[k].real],[a[k].imag,i[k].imag])
    v_line2.set_data([theta[k], v[k].imag])
    i_line2.set_data([theta[k], i[k].imag])
    
    
    secondary.set_data([a[k].real+b.real,a[k].imag+b.imag])
    g = b[k]/a[k]
    z = v[k]/i[k]
    #ax,=fig.get_axes()
    ax.set_title('$\Gamma = %.1f e ^{%.1fj\pi}$, '\
                 '$Z=  %.1f e^{%.1fj\pi}$'\
                   %( abs(g), angle(g)/pi, abs(z), angle(z)/pi))
    return lines,

animation.FuncAnimation(fig, animate, len(theta), init_func=init,
                         interval=40, blit=True)


Out[19]:


Once Loop Reflect

Interactive


In [13]:
from IPython.html.widgets import interact, interactive, fixed
from IPython.display import display

from IPython.html import widgets
# create a simple animation
#fig = plt.figure(figsize = (5,5))
#ax = plt.axes(xlim=(-3, 3), ylim=(-3, 3))

fig,axs = subplots(1,2 , sharey=True,
                   subplot_kw=dict(xlim=(-3, 3), ylim=(-3, 3)),
                   figsize=(8,3))
ax, ax2 = axs
ax.axis('equal')
ax2.axis('equal')

# vectors 
a_line, = ax.plot([], [], 'o-',lw=2, color ='b', label = 'a')
b_line, = ax.plot([], [], 'o-',lw=2, color='r', label = r'$\pm$b')
c_line, = ax.plot([], [], 'o-',lw=2, color='r',label = None)
v_line, = ax.plot([], [], 'o-',lw=2, color='g', label= 'v')
i_line, = ax.plot([], [], 'o-',lw=2, color='y', label = 'i')
# trajectories
primary, = ax.plot(a.real, a.imag)
secondary, = ax.plot(a0+b.real, a0+b.imag)
result_v,=ax.plot(v.real, v.imag)
result_i,=ax.plot(i.real, i.imag)

primary, = ax2.plot(theta, a.imag)
secondary, = ax2.plot(theta, a0+b.imag)
result_v,=ax2.plot(theta, v.imag)
result_i,=ax.plot(theta, i.imag)

close()


def animate(phi,Gamma_mag, Gamma_phase):
    global fig,ax,lines
    
    Gamma0 = Gamma_mag*exp(1j*Gamma_phase*pi)
    a0 = 1
    b0 = Gamma0*a0

    theta = linspace(0,2*pi,101)
    a =  a0*exp(1j*theta)
    b =  b0*exp(-1j*theta)
    v = a+b
    i = (a-b)

    k = rf.find_nearest_index(theta, phi*pi)
    
    
    primary.set_data([a.real, a.imag])
    secondary.set_data([a0+b.real, a0+b.imag])
    result_v.set_data([v.real, v.imag])
    result_i.set_data([i.real, i.imag])
    a_line.set_data([0,a[k].real],[0,a[k].imag])
    b_line.set_data([a[k].real,v[k].real],[a[k].imag,v[k].imag])
    c_line.set_data([a[k].real,i[k].real],[a[k].imag,i[k].imag])
    v_line.set_data([0,v[k].real],[0,v[k].imag])
    i_line.set_data([0,i[k].real],[0,i[k].imag])
    secondary.set_data([a[k].real+b.real,a[k].imag+b.imag])
    g = b[k]/a[k]
    z = v[k]/i[k]
    #ax,=fig.get_axes()
    ax.set_title('$\Gamma = %.1f e ^{%.1fj\pi}$, '\
                 '$Z=  %.1f e^{%.1fj\pi}$'\
                   %( abs(g), angle(g)/pi, abs(z), angle(z)/pi))
    display(fig)

interactive(animate, 
            phi = (0, 2,.1), 
            Gamma_mag=(-2,2,.1), 
            Gamma_phase=(0,2,.1) )



In [65]:
ax.plot?

In [26]:
fig,axs = subplots(1,2 , sharey=True,
                   subplot_kw=dict(xlim=(-3, 3), ylim=(-3, 3)),
                   figsize=(8,3))
ax1, ax2 = axs



In [19]:
subplots?

In [11]:
axis?

In [ ]: