Voici un exercice prêt à l’emploi destiné aux élèves du secondaire math-sciences, permettant de coder en Python un calculateur simple de trajectoire d’un projectile. Cet exercice met en pratique les compétences en physique, mathématiques et programmation.
À la fin de cet exercice, tu seras capable :
Pour calculer la trajectoire d’un projectile (ex. : un boulet de canon), on utilise les formules suivantes issues de la physique du mouvement :
Décomposition de la vitesse initiale :
Quand tu lances un projectile à une vitesse initiale ( v ), avec un angle de lancement ( \alpha ) :
[ v_x = v \cdot \cos(\alpha) \quad;\quad v_y = v \cdot \sin(\alpha) ]
Position en fonction du temps :
La position du projectile à l'instant ( t ) avec une gravité ( g ) est donnée par :
[ x(t) = v_x \cdot t ]
[ y(t) = v_y \cdot t - \frac{1}{2} g \cdot t^2 ]
Où :
Voici le squelette du programme de jeu. À toi de coder la fonction calcul_trajectoire en utilisant les formules ci-dessus !
import pygame
import math
# Paramètres du jeu
LARGEUR, HAUTEUR = 1900, 1000
FPS = 60
GRAVITE = 9.81
pygame.init()
fenetre = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Simulation de trajectoire")
clock = pygame.time.Clock()
projectile_en_vol = True
def calcul_trajectoire(angle, vitesse, gravite, temps):
"""
Calcule la position (x,y) du projectile à l'instant 'temps'.
Angle en degrés, vitesse en m/s, gravité en m/s², temps en s.
Retourne un tuple (x, y).
"""
# IMPLÉMENTE LE CODE
return x, y
# Boucle principale du jeu
def main():
running = True
temps = 0
angle = 70 # Angle de lancement en degrés
vitesse = 150 # Vitesse initiale en m/s
trajectoire = [] # Liste des points calculés
projectile_en_vol = True
# Configuration de la police pour afficher les informations
font = pygame.font.SysFont("Arial", 18)
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Calcule la trajectoire point par point toutes les 0.1 secondes
if projectile_en_vol:
x, y = calcul_trajectoire(angle, vitesse, GRAVITE, temps)
# Conversion coordonnées réelles vers coordonnées pygame (inverse y)
if y >= 0:
pygame_x = int(x)
pygame_y = int(HAUTEUR - y)
trajectoire.append((pygame_x, pygame_y))
temps += 0.05
else:
projectile_en_vol = False
# Affichage
fenetre.fill((255, 255, 255)) # fond blanc
# Dessiner la trajectoire
for point in trajectoire:
pygame.draw.circle(fenetre, (255, 0, 0), point, 3)
# Afficher vitesse, altitude, temps en haut à droite
infos = [
f"Vitesse initiale : {vitesse:.1f} m/s",
f"Altitude : {max(0, y):.1f} m",
f"Temps écoulé : {temps:.1f} s"
]
# Affichage des infos avec un léger espacement vertical
for i, texte in enumerate(infos):
surface_texte = font.render(texte, True, (0, 0, 0))
largeur_texte, hauteur_texte = surface_texte.get_size()
fenetre.blit(surface_texte, (LARGEUR - largeur_texte - 10, 10 + i * (hauteur_texte + 5)))
pygame.display.flip()
pygame.quit()
if __name__ == "__main__":
main()
Pour compléter calcul_trajectoire, tu dois :
math.radians(angle).v_x) et verticale (v_y).x et y à l’aide des formules données.(x, y).Astuce : Teste d’abord ta fonction avec des valeurs simples pour vérifier qu'elle fonctionne correctement.
Si tu utilises les valeurs :
angle = 45°vitesse = 50 m/sgravité = 9.81 m/s²Tu devrais observer à l'écran une courbe représentant la trajectoire du projectile (en forme de parabole).
sin, cos) et des équations de physique.À toi de jouer ! Bonne programmation ! 🐍🚀