Vous êtes sur la page 1sur 11

29 JUIN 2023

PROJET DE PYTHON
PROJET DE PYTHON 1

Ecole Polytechnique de Lomé


implémentation d’un problème de
RappoRt de pRojet :

Dynamique d’un solide considéré comme un point matériel


en python

PRESENTATION
Nom : SETONDJI
Prénoms : Kodjovi Jean-Pascal
Ecole : Ecole Polytechnique de Lomé
Filière : Informatique et Système
Dénomination du projet : programme de largage d’une sonde en orbite
autour de Mars
PLAN DU TRAVAIL :
Présentation de l’exercice
Présentation du problème
Objectifs quant à la résolution de ce problème
Résolution du problème
Implémentation de la résolution du problème en PYTHON
PRESENTATION DU PROBLEME

Le problème posé dans cet sujet est le soucis de mettre une


sonde spatiale en orbite autour de Mars, donc de résoudre les
contraintes de dynamique notamment liées aux forces
gravitationnelles et de passer par des calculs justes pour y
arriver.

OBJECTIFS QUANT A LA RESOLUTION DE CE PROBLEME

L’exercice proposé vise, par des calculs théoriques à trouver la


solution à ce problème de largage. Notre but est de nous servir
de cette solution pour concevoir un programme visant à gérer
ce largage.
LANGAGE DE PROGRAMMATION UTILISE : pYtHoN

RESOLUTION THEORIQUE DU PROBLEME

4.1.4 Exercice : Mise en orbite d’une sonde spatiale

1 – calcul de l’énergie mécanique de la sonde S au point A


En mécanique Em = EC + EP
Or L’effet de l’attraction gravitationnelle de Mars sur la sonde en A est
négligeable alors l’énergie potentielle en ce point peut être considérée nulle d’où

Em = EC par conséquent Em = ½ mV2


 Nature de la trajectoire
D’abord en supposant que la trajectoire soit soir elliptique soit hyperbolique, on
définit une excentricité e. Ensuite Em gravitationnelle est sous la forme :
2 2
Em = EC + EP = ½ m( + )– = (e² - 1)
Comme l’énergie mécanique de la sonde est positive ce qui implique que e > 1
d’où la trajectoire est une hyperbole de foyer O.

2 – Calcul de la constante des aires


La constante des aires est une quantité conservée au cours du mouvement d'un
corps soumis à une force centrale. Elle est ainsi désignée car elle intervient dans
la loi des aires.
La constante des aires est définie par : C = r²β̇( r = rayon de courbure, β̇ =
vitesse angulaire) : utilisation du théorème des moments 𝑀(0) = 𝑂𝐴⃗ ∧ 𝑚 𝑉𝐴
| ( )|
D’où 𝐶 = = 𝑏𝑣

3 – Calcul du module de la vitesse Vb


Le moment cinétique est conservé car la force est centrale. Ainsi le moment
cinétique de la sonde S en B est tangent au cercle.
𝑏𝑣
|𝑀(0)| = 𝑚 𝛼𝑅𝑚𝑣 = 𝑚 𝑏𝑉 ⇒ 𝑣 =
𝛼𝑅𝑚

4 – Expression du paramètre d’impact b


Par la conservation de l’énergie mécanique, on a :
Em(A) = Em(B)

d’où
 Expression de b0 pour que la sonde se pose sur Mars
Pour que la sonde atterrisse sur la surface de Mars, la valeur bo du paramètre
d’impact est celle qui correspond à α = 1, ce qui donne :

b0 =

5 – Vitesse d’un objet sur l’orbite circulaire

La trajectoire étant circulaire, on utilisera le principe fondamental de la


dynamique. La trajectoire est circulaire ce qui implique que la composante
tangentielle de l’accélération est nulle.
Γ(M/R) = ~γ(normal)(M/R). Comme la force `a laquelle le point matériel M
est soumis est centrale, alors elle est colinéaire avec l’accélération, ce qui
donne pour le PFD :( )
=𝑚 ⇒𝑉 =

6 – Calcul de la variation de vitesse à communiquer à S en


B
Pour faire passer la sonde sur l’orbite circulaire de rayon αRM, la variation de
vitesse à communiquer à la sonde est :
𝐺𝑀 𝑏𝑉(𝐴)
𝛥𝑣 = 𝑉 − 𝑉(𝐵) = −
𝛼𝑅𝑚 𝛼𝑅𝑚

Implémentation de la résolution du problème en PYTHON


import numpy as np
import math
import time
import matplotlib.pyplot as plt

def calculer_energie_mecanique(masse_mars, masse_sonde,


constante_gravitationnelle, distance, excentricite):
energie_potentielle = - (constante_gravitationnelle * masse_mars *
masse_sonde) / distance
energie_cinetique = (1/2) * masse_sonde * excentricite**2
en_mecanique = energie_potentielle + energie_cinetique
return en_mecanique

def determiner_nature_trajectoire(en_mecanique):
if en_mecanique > 0:
return " la trajectoire est Elliptique"
elif en_mecanique == 0:
return "la trajectoire est Parabolique"
else:
return "la trajectoire est Hyperbolique"

# modules du numero 2

def constantes_aires(vitesse, distance, masse_objet, angle):


# masse_objet = masse de la sonde
# distance = distance entre la sonde et le centre de Mars
# vitesse = vitesse de la sonde
# angle = angle entre le vecteur vitesse et le vecteur position lié au
centre de Mars et le sonde

L = abs(masse_objet * distance * vitesse * math.sin(angle))


# L désigne ici la valeur absolue du moment cinétique du mouvement
C0 = L / masse_objet

return C0
def calculer_constante_aires_va_b(VA, b):
C1 = VA * b
return C1

""" on se propose d'étudier la mise en orbite d'une sonde spatiale autour de


Mars
on se servira de l'exercice fait précédemment pour y arriver """

""" la question 1 : il s'agit d'abord de connaitre l'energie mécanique de la


sonde et de déduire sa trajectoire
pour ce faire on va utiliser la formule liée à l'étoile bleue dans la
résolution théorique

implementation"""

# Paramètres
masse_mars = 6.39 * 10**23 # Masse de Mars en kg

# Masse de la sonde en kg
masse_sonde = input("entrer la masse de la sonde en [kg] \n")
masse_sonde = float(masse_sonde)
masse_sonde = abs(masse_sonde)

# Constante gravitationnelle en m^3/(kg*s^2)


constante_gravitationnelle = 6.67430 * 10**(-11)

# Distance entre la sonde et Mars en mètres


distance = input("veuillez saisir la distance entre la sonde et Masr en [m]
\n")
distance = float(distance)
distance = abs(distance)

# Excentricité relative à la nature du mouvement


""" le calcul de l'exentricité se fera de manière theorique et c'est le
resultat qui sera entrer """
excentricite = input("veuiller saisir l'excentricité trouvé \n")
excentricite = float(excentricite)
excentricite = abs(excentricite)

# Calcul de l'énergie mécanique


energie_mecanique = calculer_energie_mecanique(masse_mars, masse_sonde,
constante_gravitationnelle, distance, excentricite)

# Détermination de la nature de la trajectoire


nature_trajectoire = determiner_nature_trajectoire(energie_mecanique)

# Affichage des résultats


print("L'énergie mécanique de la sonde est :", energie_mecanique)
print("La nature de la trajectoire est :", nature_trajectoire)

""" la question 2 : l'objectif est de montrer que partant de la formule de la


constante des aires , la formule standard , on peut en trouver une nouvelle
expression avec le paramètre d'impact et la vitesse de départ"""
""" d'abord nous devons calculer la constante des aires de ces deux manières
"""

# C = θ’ × r² = r × v = L/m
"""cette formule est la formule standard de la constante des aires exprimée en
fonction de L=moment cinétique du mouvement et m = la masse de l'objet """

# Calcul de la constante des aires avec la formule basée sur VA et b


""" le but de l'exercice n'est pas de trouver en fait le paramètre d'impact
cette variable a déja été définie et utilisée dans les exercices antérieurs
on se servira juste de ce resultat"""
VA = input("entrer la vitesse de la sonde en [m/s] \n")
VA = float(VA)
VA = abs(VA)

b = input("entrer la valeur du paramètre d'impact \n")


b = float(b)
b = abs(b)
C = calculer_constante_aires_va_b(VA, b)

# Calcul de la constante des aires en utilisant le moment cinétique

# entrer de l'angle
angle = input("veuiller entrer l'angle entre la sonde le vecteur vitesse et le
vecteur position en [deg] \n")
angle = float(angle)
angle = math.radians(angle)
angle = abs(angle)

# entrer de la vitesse de la sonde


vitesse = input(" saisir la vitesse de la sonde en [m/s] \n")
vitesse = float(vitesse)
vitesse = abs(vitesse)

# les valeurs de la masse_objet et la distance entre les deux corps ont déja
été données dans le numeros précédents

C_standard = constantes_aires(vitesse, distance, masse_sonde, angle)

print(C_standard, "\n")
print(C)

incertitude = (C - C_standard)/C_standard
incertitude_en_pourcent = incertitude * 100
print("les deux valeurs de la constante des aires sont égales à ",
incertitude_en_pourcent, "% \n")
""" la question 3 : la question dit de calculer le module de la vitesse en
fonction des paramètres données """

""" la trajectoire d'approche est tangente au cercle de centre 0 et de rayon


un multiple du rayon de Mars"""

def vitesse_VB(p, a):


rayon_Mar = 3389 # cette valeur est en [m]
VB = (p * VA) / (a * rayon_Mar)
return VB
# a va désigner le nombre par lequel on va multiplier le rayon de Mars pour
avoir le rayon de l'orbite

rayon_Mars = 3389
print("veuiller entrer la valeur de l'orbite du multiple du rayon de Mars \n
saisir une valeur superieur à 1 \n")
multiple = input(">")
multiple = float(multiple)
multiple = abs(multiple)

vitesse_en_B = vitesse_VB(b, multiple) # b est le paramètre d'impact


print(vitesse_en_B)

""" la question 5 : expression de la vitesse de la sonde sur l'orbitale


circulaire """

vitesse_orbitale = math.sqrt((constante_gravitationnelle * masse_mars) /


(multiple * rayon_Mars))

print(vitesse_orbitale)

""" la question 6 : calculons la variation de la vitesse à communiquer à la


sonde """

variation_vitesse = vitesse_orbitale - vitesse_en_B

print(variation_vitesse)

print("avec les paramètres entrés et à la suite de la donnée de la variation d


la vitesse donnée , la sonde doit effectuer un mouvement de rotation
circulaire effectuer comme suit")

timeout = 10
time.sleep(timeout)

# representation graphique

def calculer_position_orbite(theata, rayon_de_orbite):


x = rayon_de_orbite * math.cos(theata)
y = rayon_de_orbite * math.sin(theata)
return x, y

# Paramètres de MARS
centre_x = 0
centre_y = 0
rayon_Mars = 3389

# Paramètres de l'orbite
facteur_rayon_orbite = multiple # multiple > 1
rayon_orbite = rayon_Mars * facteur_rayon_orbite

# Calcul des positions de l'orbite


angles = [math.radians(angle) for angle in range(0, 361)]
positions_x = []
positions_y = []
for angle in angles:
x, y = calculer_position_orbite(angle, rayon_orbite)
positions_x.append(x)
positions_y.append(y)

# Tracer Mars et l'orbite


fig, ax = plt.subplots()
Mars = plt.Circle((centre_x, centre_y), rayon_Mars, color='blue', fill=True)
orbite = plt.plot(positions_x, positions_y, color='red')

# Configurer les axes


limite = rayon_Mars + rayon_orbite
ax.set_xlim(-limite, limite)
ax.set_ylim(-limite, limite)
ax.set_aspect('equal', adjustable='box')

# Ajouter des légendes et des titres


ax.add_artist(Mars)
ax.legend(['Orbite', 'MArs'])
ax.set_title("Orbite autour de Mars ")

# Afficher le graphique
plt.show()

Vous aimerez peut-être aussi