6. šikmý vrh se započteným odporem vzduchu

image.png

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

parametry pohybu

In [14]:
dt=0.00001 #časový krok
alpha=20*np.pi/180 #úhel vyhození míče (v rad) 
v0=10 #velikost počáteční rychlosti 10 m/s
u=5 #rychlost protivětru 5 m/s
m=0.45 #hmotnost míče 450 g
k=0.5 #koeficient odporov0 síly vzduchu F0 = kv^2 (Newtonův režim) 
g=9.81373 #tíhové zrychlení

definice polí času, souřadnic a rychlostí, v je pole velikost rychlostí

In [15]:
t=[]
x=[]
y=[]
vx=[]
vy=[]
v=[]

počáteční podmínky
$x(0)=0$
$y(0)=0$
$\dot{x}(0)=v_0\cos\alpha-u$
$\dot{y}(0)=v_0\sin\alpha$

In [16]:
t=np.append(t,0)
x=np.append(x,0)
y=np.append(y,0)
vx=np.append(vx,v0*np.cos(alpha)-u)
vy=np.append(vy,v0*np.sin(alpha)-g*dt/2)
v=np.append(v,np.sqrt(vx**2+vy**2))

numerické řešení pohybové rovnice
$\ddot{x}=-\frac{k}{m}\sqrt{\dot{x}^2+\dot{y}^2}\;\dot{x}$
$\ddot{y}=-g-\frac{k}{m}\sqrt{\dot{x}^2+\dot{y}^2}\;\dot{y}$

In [17]:
i=0
while True:
    t=np.append(t,t[i]+dt)
    x=np.append(x,x[i]+vx[i]*dt)
    y=np.append(y,y[i]+vy[i]*dt)
    vx=np.append(vx,vx[i]-k/m*v[i]*vx[i]*dt)
    vy=np.append(vy,vy[i]-(g+k/m*v[i]*vy[i])*dt)
    v=np.append(v,np.sqrt(vx[i]**2+vy[i]**2))
    if y[i] <=0 and i>0 :
        break
    i+=1

vykreslení trajektorie

In [18]:
fig,ax=plt.subplots()
ax.plot(x,y)
ax.set_xlim(0,)
ax.set_ylim(0,)
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
plt.show()
No description has been provided for this image
In [19]:
print(f"Míč dopadne ve vzdálenosti {abs(x[i]):6.3f} m od počátku a vystoupí do výšky {np.max(y):6.3f} m")
Míč dopadne ve vzdálenosti  1.035 m od počátku a vystoupí do výšky  0.300 m

Pro srovnání spočítáme také trajektorii šikmého vrhu bez odporu vzdudchu

In [20]:
t_f=[]
x_f=[]
y_f=[]
vx_f=[]
vy_f=[]
v_f=[]
In [21]:
t_f=np.append(t_f,0)
x_f=np.append(x_f,0)
y_f=np.append(y_f,0)
vx_f=np.append(vx_f,v0*np.cos(alpha)-u)
vy_f=np.append(vy_f,v0*np.sin(alpha))
In [22]:
i=0
while True:
    t_f=np.append(t_f,t_f[i]+dt)
    x_f=np.append(x_f,x_f[i]+vx_f[i]*dt)
    y_f=np.append(y_f,y_f[i]+vy_f[i]*dt)
    vx_f=np.append(vx_f,vx_f[i])
    vy_f=np.append(vy_f,vy_f[i]-g*dt)
    if y_f[i] <=0 and i>0 :
        break
    i+=1
In [23]:
fig,ax=plt.subplots()
ax.plot(x,y,label="s odporem vzduchu")
ax.plot(x_f,y_f,ls='dashed',c='black',label="bez odporu vzduchu")
ax.set_xlim(0,)
ax.set_ylim(0,)
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
ax.legend()
plt.show()
No description has been provided for this image
In [24]:
print(f"S odporem vzduchu míč dopadne ve vzdálenosti {np.max(x):6.3f} m od počátku a vystoupí do výšky {np.max(y):6.3f} m")
print(f"Bez odporu vzduchu míč dopadne ve vzdálenosti {np.max(x_f):6.3f} m od počátku a vystoupí do výšky {np.max(y_f):6.3f} m")
S odporem vzduchu míč dopadne ve vzdálenosti  1.035 m od počátku a vystoupí do výšky  0.300 m
Bez odporu vzduchu míč dopadne ve vzdálenosti  3.065 m od počátku a vystoupí do výšky  0.596 m
In [ ]: