Částice v poli lineárně polarizované monochromatické rovinné vlny

Rovinná vlna nechť se pohybuje ve směru osy $x$ a intenzita elektrického pole nechť harmonicky osciluje ve směru osy $y$ s amplitudou $E_0$ a úhlovou frekvencí $\omega=kc$. Částice nechť má malý náboj $q$ a hmotnost $m$. Rychlost světla je $c$. Potom v inerciální vztažné soustavě, ve které je částice průměrně v klidu dostaneme $$ X=kx = -\frac{\epsilon^2}{8}\sin 2\eta, \quad Y=ky = -\epsilon\cos\eta,\quad T=\omega t = \eta- \frac{\epsilon^2}{8}\sin 2\eta, $$ kde $$ \epsilon=\frac{\alpha}{\sqrt{1+\alpha^2}}, \quad \alpha=\frac{qE_0}{mc\omega}. $$ Zvolme $\epsilon=1$.

In [1]:
import matplotlib.pyplot as plt
import numpy as np
from scipy import optimize
from moviepy.editor import VideoClip
from moviepy.video.io.bindings import mplfig_to_npimage
 
# parametry obrázků / rámců
WIDTH = 800
HEIGHT = 400
DPI = 100
 
# parametry animace
DURATION = 10
FPS = 15
 
# vytvoření objektu reprezentujícího průběh funkce
# + nastavení rozlišení obrázku (resp. jednotlivých rámců)
fig, axis = plt.subplots(figsize=(1.0 * WIDTH / DPI, 1.0 * HEIGHT / DPI), dpi=DPI)
In [2]:
def XX(eta):
    return -0.125*np.sin(2.0*eta)
def YY(eta):
    return -np.cos(eta)
def TT(eta):
    return eta-0.125*np.sin(2.0*eta)
def TTdif(eta):
    return 1-0.25*np.cos(2.0*eta)
In [3]:
def make_frame(S):
    axis.clear()
    T=2*np.pi*S/DURATION
    eta = optimize.newton(lambda x:TT(x)-T,T,fprime=TTdif)
    ETA = np.arange(0.0, 2*np.pi, 0.01)
    X = XX(ETA)
    Y = YY(ETA)
    x = XX(eta)
    y = YY(eta)

    plt.xlim(-1.2, 1.2)
    plt.ylim(-0.25,0.25)
    plt.xticks([])
    plt.yticks([])
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    ax.spines['bottom'].set_position(('data',0))
    ax.spines['left'].set_position(('data',0))
    ax.xaxis.set_label_coords(0.99, 0.48)
    ax.yaxis.set_label_coords(0.48,0.95)
    plt.xlabel(r'$ky$')
    plt.ylabel(r'$kx$')
    plt.scatter(y,x, 50, color='red')
    plt.plot(Y,X)
    # konverze na objekt typu "frame"
    return mplfig_to_npimage(fig)
 
animation = VideoClip(make_frame, duration=DURATION)
animation.write_videofile("castice_elmag.mp4",fps=FPS)
[MoviePy] >>>> Building video castice_elmag.mp4
[MoviePy] Writing video castice_elmag.mp4
 99%|█████████▉| 150/151 [00:04<00:00, 36.95it/s]
[MoviePy] Done.
[MoviePy] >>>> Video ready: castice_elmag.mp4