Š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 [1]:
import numpy as np
import matplotlib.pyplot as plt

gravitační zrychlení

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

úhel vrhu $\alpha$

In [3]:
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 [4]:
tmax = 10 #doba, po kterou šikmý vrh sledujeme (zde 10 s)

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

In [5]:
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 [6]:
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 [7]:
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 [8]:
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}
In [9]:
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

In [10]:
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 [11]:
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 [12]:
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