Chapitre 14

Activités Python

Mouvement dans un champ uniforme

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 :

  1. Compléter la décomposition de v0\vec v_0 (attention : math.radians).
  2. 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.
  3. 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()

← Retour au portail du chapitre