Š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
Nyní numericky vyřešíme pohybovu rovnici šikmého vrhu \begin{align} \ddot{x} &= 0\\ \ddot{y} &= -g\\ \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] = x[i-1]+vx[i-1]*dt #update x-ové souřadnice pro čas t -> d + dt
y[i] = y[i-1]+vy[i-1]*dt #update y-ové souřadnice pro čas t -> d + dt
if y[i]<0: #spadlo to na zem
istop = 1
imax = i
vx[i] = vx[i-1] #update x-ové složky rychlosti pro čas t -> d + dt
vy[i] = vy[i-1]-g*dt #update y-ové složky rychlosti pro čas t -> d + dt
v[i] = np.sqrt(vx[i]**2+vy[i]**2) #velikost rychlosti
s[i] = s[i-1]+v[i]*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