Vous êtes sur la page 1sur 3

import numpy as np

import matplotlib.pyplot as plt


from mpl_toolkits.mplot3d import Axes3D

# Fonction pour calculer la trajectoire de la balle avec rotation


def trajectoire_balle(vitesse_initiale, angle_lancer, hauteur_lancer, rotation_speed, gravite=9.81,
pas_temps=0.01):
# Initialisation des variables
vitesse_x = vitesse_initiale * np.cos(np.radians(angle_lancer))
vitesse_y = vitesse_initiale * np.sin(np.radians(angle_lancer))
vitesse_z = 0.0
temps = 0.0

# Listes pour stocker les coordonnées


positions_x = [0.0]
positions_y = [0.0]
positions_z = [hauteur_lancer]

# Boucle de calcul de la trajectoire


while True:
temps += pas_temps
vitesse_z -= gravite * pas_temps
nouvelle_position_x = positions_x[-1] + vitesse_x * pas_temps
nouvelle_position_y = positions_y[-1] + vitesse_y * pas_temps
nouvelle_position_z = max(0.0, positions_z[-1] + vitesse_z * pas_temps)

if nouvelle_position_z == 0.0 and nouvelle_position_y > 0.0:


# La balle a touché le sol du côté adverse
break

# Appliquer la rotation autour de l'axe z


rotation_matrix = np.array([[np.cos(rotation_speed*temps), -np.sin(rotation_speed*temps), 0],
[np.sin(rotation_speed*temps), np.cos(rotation_speed*temps), 0],
[0, 0, 1]])
nouvelle_position = np.dot(rotation_matrix, np.array([nouvelle_position_x, nouvelle_position_y,
nouvelle_position_z]))

positions_x.append(nouvelle_position[0])
positions_y.append(nouvelle_position[1])
positions_z.append(nouvelle_position[2])

return positions_x, positions_y, positions_z

# Paramètres de la balle et de la trajectoire


vitesse_initiale = 20.0 # en m/s
angle_lancer = 45.0 # en degrés
hauteur_lancer = 2.0 # hauteur initiale du lancer en mètres
rotation_speed = 0.02 # vitesse de rotation en rad/s

# Calcul de la trajectoire avec rotation


x, y, z = trajectoire_balle(vitesse_initiale, angle_lancer, hauteur_lancer, rotation_speed)

# Création du graphe 3D
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')

# Trajectoire de la balle
ax.plot(x, y, z, color='blue', linewidth=2)
# Balle de tennis
ax.scatter(x[-1], y[-1], z[-1], color='red', marker='o', label='Position de la balle')
# Configuration des axes
ax.set_xlabel('X (m)')
ax.set_ylabel('Y (m)')
ax.set_zlabel('Z (m)')

# Titre du graphe
ax.set_title('Trajectoire de la balle de tennis avec rotation dans l\'air')

# Affichage du graphe
plt.show()

Vous aimerez peut-être aussi