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$.
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)
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)
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)