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. Deux lignes sont à compléter : la décomposition de v→0\vec v_0 en vx0 et vz0, l’angle étant converti en radians par math.radians. Le reste, y compris le tracé des cinq trajectoires, est fourni.

Questions :

  1. Compléter la décomposition de v→0\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