Šikmý vrh¶
příklad výpočtu trajektorie hmotného bodu při šikmém vrhu numerickým řešením pohybové rovnice

importujeme knihovny numpy (na numerické výpočty) a matplotlib (na kreslení grafů)
import numpy as np
import matplotlib.pyplot as plt
gravitační zrychlení
g = 9.82 #gravitační zrychlení m/s^2
úhel vrhu $\alpha$
alpha = 80 #úhel vrhu 80 stupňů
alpha = alpha*np.pi/180 #převod na radiány
Zvolíme dobu $t_{max}$, po kterou hmotný bod budeme sledovat
tmax = 10 #doba, po kterou šikmý vrh sledujeme (zde 10 s)
Zvolíme časový krok dt pro numerické řešení
dt = 0.001 #časový krok pro numerický výpočet derivace (zde tisícina sekundy)
Vytvoříme pole t obsahující časy,
pole x a y obsahující souřadnice v těchto časech
pole vx a vy obsahující rychlosti v těchto časech
t = np.arange(0,tmax,dt) #pole časů
x = np.empty(np.size(t)) #pole x-ových souřadnic
y = np.empty(np.size(t)) #pole y-ových souřadnic
vx = np.empty(np.size(t)) #pole x-ových složek rychlostí
vy = np.empty(np.size(t)) #pole y-ových složek rychlostí
Můžeme ještě vytvořit pole v obsahující velikost rychlosti v jednotlivých časech, $v=\sqrt{v_x^2+v_y^2}$
a pole s obsahující dráhu, kterou hmotný bod urazil, $s=\int_0^t v(t)\,dt$.
v = np.empty(np.size(t)) #pole velikostí rychlostí
s = np.empty(np.size(t)) #pole uražené dráhy
počáteční podmínky:
- hmotný bod je v čase $t = 0$ v počátku, tj. v bodě $[0,0]$
- v čase $t = 0$ má rychlost o velikosti $v_0$ a vektor rychlosti svírá s osou $x$ úhlel $\alpha$, tj. vektor rychlosti v čase $t = 0\,$ je $\,\vec{v}(t=0) = (v_0\,\text{cos}\alpha,v_0\,\text{cos}\alpha)$.
x[0] = 0 # x-ová souřadnice v čase t = 0
y[0] = 0 # y-ová souřadnice v čase t = 0
v[0] = v0 = 10 #velikost rychlosti v čase t = 0 (zde 10 m/s)
vx[0] = v0*np.cos(alpha) # x-ová složka rychlosti v čase t = 0 + dt/2
vy[0] = v0*np.sin(alpha)-g*dt/2 # y-ová složka rychlosti v čase t = 0 + dt/2
v[0] = np.sqrt(vx[0]**2+vy[0]**2)
s[0] = 0 #uražená dráha v čase t = 0
Pohybová rovnice šikmého vrhu je \begin{align} \ddot{x} &= 0\\ \ddot{y} &= -g\\ \end{align}
z těchto pohybových rovnic s použitím počátečních podmínek vypočítáme složky rychlosti \begin{align} v_x &= v_0\cos\alpha\\ v_y &= -gt+v_o\sin\alpha\\ \end{align}
a polohu hmotného bodu \begin{align} x &= v_0 t\cos\alpha\\ y &= -\frac{1}{2}gt^2+v_o t \sin\alpha\\ \end{align}
i = 0 #index pro cyklus přes jednotlivé časy
imax = np.size(t) #max. hodnota indexu (abychom nepřekročily rozsah pole)
istop = 0 #přepínač kontrolující jestli předmět dopadl na zem, pokud dopadne na zem -> istop=1 a cyklus skončí
while istop == 0 and i < np.size(t)-1: #cyklus běží dokud předmět nespadne na zem nebo neprojdu celé pole časů
i+=1
x[i] = v0*np.cos(alpha)*t[i] #x-ová souřadnice pro čas ti
y[i] = -g*t[i]**2/2+v0*t[i]*np.sin(alpha) #y-ovásouřadnice pro čas ti
if y[i]<=0: #spadlo to na zem
istop = 1
imax = i
vx[i] = v0*np.cos(alpha) #x-ová složky rychlosti pro čas ti
vy[i] = -g*t[i]+v0*np.sin(alpha) #y-ová složky rychlosti pro čas ti
v[i] = np.sqrt(vx[i]**2+vy[i]**2) #velikost rychlosti
s[i] = s[i-1]+(v[i-1]+v[i])/2*dt #aktuálně uražená dráha
Nakreslíme trajektorii hmotného bodu
plt.plot(x[0:imax],y[0:imax])
plt.xlabel("x")
plt.ylabel("y")
plt.xlim(0,)
plt.ylim(0,)
plt.title("trajektorie")
plt.show()
Časová závislost velikosti rychlosti
plt.plot(t[0:imax],v[0:imax],c='green')
plt.xlabel("čas (s)")
plt.ylabel("rychlost (m/s)")
plt.xlim(0,)
plt.ylim(0,)
plt.title("velikost rychlosti")
plt.show()
print(f"čas dopadu : {t[imax-1]:4.2f} s")
čas dopadu : 2.00 s
uražená dráha
plt.plot(t[0:imax],s[0:imax],c='red')
plt.xlabel("čas (s)")
plt.ylabel("dráha (m)")
plt.xlim(0,)
plt.ylim(0,)
plt.title("uražená dráha")
plt.show()
print(f"celková uražená dráha : {s[imax-1]:4.2f} m")
celková uražená dráha : 10.77 m