On étudie un tir au football. La vitesse initiale du ballon est de selon l’axe (horizontal) et de selon l’axe (vertical). Le ballon est sur le sol juste avant le tir.
Dans un premier temps, on ne prend en compte que la gravité.
1/ Établir l’équation différentielle vérifiée par la vitesse du ballon. Exprimer la dérivée de la vitesse.
Le théorème de la résultante cinétique appliqué au ballo, s’écrit
soit
On résout numériquement l’équation différentielle en utilisant la fonction solve_ivp de la bibliothèque scipy.integrate.
2/ Compléter le code suivant.
from scipy.integrate import solve_ivp, trapezoid
import numpy as np
g = 9.81 # m/s^2
rho = 1.2 # kg/m^3
v0 = np.array([20, 0, 12]) # m/s
def dv_dt(t, v):
a = ... # accélération
return a
sol = solve_ivp(dv_dt, [0, 2], v0, max_step=0.01)
t = sol.t
vx = sol.y[0, :]
vy = sol.y[1, :]
vz = sol.y[2, :]def dv_dt(t, v):
a = - g * np.array([0,0,1])
return aIl est maintenant nécessaire de calculer la position du ballon en intégrant la vitesse en utilisant la méthode des rectangles.
3/ Compléter le code suivant. Attention, les temps calculés par la fonction solve_ivp ne sont pas forcément régulièrement espacés.
x = [0]
y = [0]
z = [0]
for i in range(1, len(sol.t)):
x.append(...)
y.append(...)
z.append(...)for i in range(1, len(sol.t)):
x.append(x[-1] + vx[i] * (t[i]-t[i-1]))
y.append(y[-1] + vy[i] * (t[i]-t[i-1]))
z.append(z[-1] + vz[i] * (t[i]-t[i-1]))Pour vérifier si le tir est cadré, on trace la trajectoire du ballon grâce au code suivant.
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.plot(x, y, z)
# Tracé des cages
x_cages = 14.5
y_cages = 0.3
l_cages = 7.32
h_cages = 2.44
ax.plot(
[x_cages]*4,
[y_cages, y_cages, y_cages + l_cages, y_cages + l_cages],
[0, h_cages, h_cages, 0],
color="orange")
# Mise en forme
ax.set_xlabel("x (m)")
ax.set_ylabel("y (m)")
ax.set_zlabel("z (m)")
ax.set_title("Trajectoire 3D")
ax.set_zlim(0, max(z)*1.1)
plt.tight_layout()
plt.show()4/ Le tir est-il cadré ?
On prend maintenant en compte les frottements avec l’air . On donne les valeurs numériques suivantes : , , et
5/ Modifier la fonction dv_dt pour inclure la force de traînée.
On pourra utiliser la fonction np.linalg.norm(v) pour calculer la norme du vecteur vitesse .
Le tir est-il maintenant cadré ?
rho = 1.2 # kg/m^3
Cx = 0.47 # coefficient de trainée
R = 0.11 # rayon m
S = np.pi * R**2 # cross-sectional area
m = 0.145 # masse kg
def dv_dt(t, v):
a = - g * np.array([0,0,1]) - 1/2 * rho * Cx * S / m * np.linalg.norm(v) * v
return aLe tir n’est toujours pas cadré, il passe à coté des cages.
Le footballeur a mis de l’effet dans la balle en lui imprimant une rotation de autour de l’axe . Cette rotation engendre une force de portance appelée force de Magnus et s’exprimant comme avec .
6/ Modifier la fonction dv_dt pour inclure la force de Magnus.
Le tir est-il maintenant cadré ?
Omega = np.array([0,0,100*2*np.pi/60])
def dv_dt(t, v):
a = - g * np.array([0,0,1]) - 1/2 * rho * Cx * S / m * np.linalg.norm(v) * v + 1/2 * rho * R**3 * np.cross(Omega,v) / m
return aOui, en prenant en compte toutes ces forces, le tir est cadré.