Trajektorie míče hozeného na kolotoči¶
Výpočet trajektorie míče hozeného z okraje kolotoče do středu v neinerciální soustavě otáčející se spolu s kolotočem
import numpy as np
import matplotlib.pyplot as plt
omega=2*np.pi #úhlová rychlost otáčení kolotoče
tmax=1 #čas, pro který míč sledujeme (jedna otočka kolotoče)
dt=0.0001 #časový krok pro numerické řešení pohybové rovnice
t=np.arange(0,tmax,dt) #pole časů, v kterých budeme počítat polohy míče
souřadnice a rychlosti v inerciální soustavě spojené s pozorovatelem mimo kolotoč
#souřadnice v inerciální soustavě
x=np.empty(np.size(t))
y=np.empty(np.size(t))
#rychlosti v inerciální soustavě
vx=np.empty(np.size(t))
vy=np.empty(np.size(t))
souřadnice a rychlosti v neinerciální soustavě otáčenící se spolu s kolotočem
#souřadnice v neinerciální soustavě spojené s kolotočem
xp=np.empty(np.size(t))
yp=np.empty(np.size(t))
#rychlosti v neinerciální soustavě spojené s kolotočem
vxp=np.empty(np.size(t))
vyp=np.empty(np.size(t))
počáteční podmínky v inerciální soustavě
#počáteční poloha v inerciální soustavě
x[0]=0
y[0]=10 #míč je v poloze 12 hodin na okraji kolotoče
#počáteční rychlost v inerciální soustavě
vx[0]=0
vy[0]=-40 #míč má rychlost směřující do středu kolotoče
počáteční podmínky v neinerciální soustavě
#počáteční poloha v inerciální soustavě
xp[0]=x[0]*np.cos(omega*t[0])+y[0]*np.sin(omega*t[0])
yp[0]=-x[0]*np.sin(omega*t[0])+y[0]*np.cos(omega*t[0])
#počáteční rychlost v inerciální soustavě
vxp[0]=yp[0]*omega+vx[0]*np.cos(omega*t[0])+vy[0]*np.sin(omega*t[0])
vyp[0]=-xp[0]*omega-vx[0]*np.sin(omega*t[0])+vy[0]*np.cos(omega*t[0])
Pohyb míče v neinerciální soustavě, která se otáčí, je popsán pohybovou rovnicí:
$m\vec{a^{\prime}} = \vec{F}_o + \vec{F}_C,$
kde $\vec{F}_o = -m\vec{\omega}\times(\vec{\omega}\times\vec{r})$ je odstředivá síla
a $\vec{F}_C = -2m\vec{\omega}\times\vec{v^{\prime}}$ je Coriolisova síla.
V tomto konkrétním případě se kolotoč otáčí v rovině $xy$ a vektor úhlové rychlosti otáčení kolotoče je $\vec{\omega} = (0,0,\omega)$.
Jedná se tedy o otáčení v rovině a pohybová rovnice rozepsaná ve složkách je
\begin{align}
\ddot{x^{\prime}} &= \omega^2x^{\prime} + 2\omega\dot{y^{\prime}}\\
\ddot{y^{\prime}} &= \omega^2y^{\prime} - 2\omega\dot{x^{\prime}}\\
\end{align}
Řešení této pohybové rovnice získáme numericky
imax=0
#numericke reseni pohybove rovnice
for i in range(np.size(t)-1):
x[i+1]=x[i]+vx[i]*dt
y[i+1]=y[i]+vy[i]*dt
xp[i+1]=xp[i]+vxp[i]*dt
yp[i+1]=yp[i]+vyp[i]*dt
vx[i+1]=vx[i]
vy[i+1]=vy[i]
vxp[i+1]=vxp[i]+(omega**2*xp[i]+2*omega*vyp[i])*dt #odstrediva a Corriolisova sila
vyp[i+1]=vyp[i]+(omega**2*yp[i]-2*omega*vxp[i])*dt #odstrediva a Corriolisova sila
if xp[i+1]<0 and imax==0: #mic doletel do stredu kolotoce
imax=i+1
Vykreslení trajektorie míče
fig,ax=plt.subplots(figsize=(6,6))
ax.plot(x[0:imax],y[0:imax],c='blue',label='trajektorie v inerciální soustavě')
ax.plot(xp[0:imax],yp[0:imax],c='red',label='trajektorie v neinerciální soustavě')
phi=np.linspace(0,2*np.pi,100)
ax.plot(y[0]*np.cos(phi),y[0]*np.sin(phi),c='green',ls='dashed')
ax.set_xlabel('x',fontsize=14)
ax.set_ylabel('y',fontsize=14)
plt.legend()
plt.show()