Created
January 16, 2021 17:20
-
-
Save SCOTT-HAMILTON/a1210b83e6fa41d15ee7462c5b0d1e14 to your computer and use it in GitHub Desktop.
TP - Physique-Chimie - Meilleur portée d'un projectile selon différents angles de lancer.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import matplotlib.pylab as plt | |
from pprint import pprint | |
print("") | |
print("*****************************") | |
print("* Mouvement d'un projectile *") | |
print("*****************************") | |
print("") | |
portees = [] | |
for angle in range(90): | |
### Données | |
h = 2.2 # Altitude initiale de la boule (m) | |
v0 = 10 # Norme de la vitesse initiale (m/s) | |
m = 4.00 # Masse du système (kg) | |
g = 9.81 # Norme du champ de pesanteur (N/kg) | |
Np = 100000 # Nombre de pas maximal de calcul | |
Dt = 1e-2 # Pas de temps (s) | |
####################################### | |
### Données à modifier (question 2) ### | |
####################################### | |
# angle=90 # Angle de lancer au-dessus de l'horizontale (°) | |
k = 0.1 # Coefficient de frottement k (N.s/m) | |
Tx = -10 # Force du vent Tx (N) | |
### Initialisation | |
### Création de tableaux remplis de zéros | |
t = np.zeros(Np + 1) | |
x = np.zeros(Np + 1) | |
y = np.zeros(Np + 1) | |
vx = np.zeros(Np + 1) | |
vy = np.zeros(Np + 1) | |
### Position initiale de la boule | |
x[0] = 0 | |
y[0] = h | |
### Coordonnées du vecteur vitesse initiale | |
vx[0] = v0 * np.cos(angle / 180 * np.pi) | |
vy[0] = v0 * np.sin(angle / 180 * np.pi) | |
### Pas de calcul | |
p = 0 | |
### Boucle de calcul du mouvement | |
while y[p] >= 0: | |
# Calcul de la date | |
t[p + 1] = t[p] + Dt | |
######################################## | |
### À compléter : question 1a puis 2 ### | |
######################################## | |
### Coordonnées de la somme des forces | |
Fx = k * Tx | |
Fy = -m * g | |
### Coordonnées de la variation du vecteur vitesse | |
Dvx = Dt / m * Fx | |
Dvy = Dt / m * Fy | |
### Coordonnées du vecteur vitesse à l'instant t+Dt | |
vx[p + 1] = vx[p] + Dvx | |
vy[p + 1] = vy[p] + Dvy | |
### Ne pas modifier : | |
### Coordonnées de la position à l'instant t+Dt | |
x[p + 1] = x[p] + vx[p] * Dt | |
y[p + 1] = y[p] + vy[p] * Dt | |
### Avancement du pas de calcul | |
p += 1 | |
################################## | |
#### À modifier : question 1b #### | |
### Détermination de la portée ### | |
################################## | |
portee = x[p - 1] | |
### Affichage des données et de la portée | |
# print("Données :") | |
# print("- masse du système m =",m,"kg") | |
# print("- hauteur de lancer h =",h,"m") | |
# print("- norme de la vitesse initiale v0 =",v0,"m/s") | |
# print("- angle de tir",angle,"°") | |
# print("- coefficient de frottement k =",k,"N.s/m") | |
# print("- force due au vent horizontal Tx =",Tx," N") | |
# print("Portée du tir :",portee,"m") | |
# print("") | |
portees.append((portee, angle)) | |
# ### Tracé de la trajectoire du système | |
# plt.plot(x[0:p],y[0:p],'-',lw=2) | |
# plt.xlabel("x (en m)") | |
# plt.ylabel("y (en m)") | |
# plt.title("Trajectoire du système") | |
# plt.grid(True) | |
# plt.tight_layout() | |
# plt.show() | |
pprint(portees) | |
meilleur_portée = max(portees, key=lambda x: x[0]) | |
print(f"Meilleur portée : {round(meilleur_portée[0],2)}, meilleur angle : {meilleur_portée[1]}°") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment