Activité
Comparer des trajectoires balistiques
Consigne
Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.
Le script Ch14_portee.py (dossier scripts/) construit les trajectoires point par point avec les équations horaires, pour cinq angles de tir, et affiche la portée de chacun. Il s’exécute tel quel, à deux lignes près (# À COMPLÉTER).
(La suite — le tracé des cinq trajectoires — est fournie et n’est pas à modifier.)
Questions :
- Compléter la décomposition de (attention :
math.radians). - Exécuter : quel angle porte le plus loin ? Quels couples d’angles donnent, à la précision du pas de calcul, la même portée ? Formuler la règle.
- Où, dans le script, reconnaît-on les équations horaires du §3 ? Que représente la condition
zs[len(zs) - 1] >= 0.0?
O5 - Python et M2 - tracé et modélisation de graphe : les outils nécessaires y sont rappelés.
Script élève
# -*- coding: utf-8 -*-
# Chapitre 14 — Trajectoires d'un projectile selon l'angle
# Pour chaque angle de tir, on construit la trajectoire point par point
# avec les équations horaires, et on relève la portée.
import math
import matplotlib.pyplot as plt
g = 9.81
v0 = 20.0 # vitesse initiale (m/s)
angles = [15, 30, 45, 60, 75] # degrés
legendes = ["15°", "30°", "45°", "60°", "75°"]
print("angle (°) | portée (m)")
for i in range(len(angles)):
alpha = angles[i]
a = math.radians(alpha)
vx0 = 0 # décomposition de v0 # À COMPLÉTER
vz0 = 0 # décomposition de v0 # À COMPLÉTER
xs = [0.0]
zs = [0.0]
t = 0.0
while zs[len(zs) - 1] >= 0.0:
t = t + 0.01
xs.append(vx0 * t)
zs.append(vz0 * t - 0.5 * g * t * t)
print("angle", alpha, ": portée", xs[len(xs) - 1], "m")
plt.plot(xs, zs, label=legendes[i])
plt.xlabel("x (m)")
plt.ylabel("z (m)")
plt.axhline(0, color="k", lw=0.8)
plt.legend()
plt.grid(True)
plt.title("Quelle portée pour quel angle ?")
plt.show()