Šikmý vrh¶

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

importujeme knihovny numpy (na numerické výpočty) a matplotlib (na kreslení grafů)

In [40]:
import numpy as np
import matplotlib.pyplot as plt

gravitační zrychlení

In [42]:
g = 9.82 #gravitační zrychlení m/s^2

úhel vrhu $\alpha$

In [44]:
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

In [46]:
tmax = 10 #doba, po kterou šikmý vrh sledujeme (zde 10 s)

Zvolíme časový krok dt pro numerické řešení

In [48]:
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

In [50]:
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$.

In [52]:
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)$.
In [54]:
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}

In [56]:
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

In [81]:
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()
No description has been provided for this image

Časová závislost velikosti rychlosti

In [83]:
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")
No description has been provided for this image
čas dopadu : 2.00 s

uražená dráha

In [87]:
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")
No description has been provided for this image
celková uražená dráha : 10.77 m