-
orestis.malaspin authoredorestis.malaspin authored
# author:
# - El Kharroubi Michaël
title: Travail pratique
subtitle: Simulation d'un système planétaire sur un plan à l'aide des lois de Newton
autoSectionLabels: true
autoEqnLabels: true
eqnPrefix:
- "éq."
- "éqs."
chapters: true
numberSections: false
chaptersDepth: 1
sectionsDepth: 3
lang: fr
documentclass: article
papersize: A4
cref: false
pandoc-numbering:
- category: TP
urlcolor: blue
\newcommand{\vectwo}[2]{\begin{pmatrix}#1 \ #2 \end{pmatrix}}
But
- Simuler un phénomène physique vu en cours à l'aide du langage C
- Visualiser les interactions gravitationnelles au sein d'un système planétaire.
Théorie
Rappel théorique
Dans notre univers, tous les corps sont soumis à des forces. Une force est une grandeur permettant de quantifier pour un corps : la direction, le sens et l'intensité de son interaction avec les autres corps. Dans le cadre de ce travail pratique, nous nous intéresserons à l'une des quatre forces fondamentales, la force de gravitation. Pour rappel, les forces suivent les trois lois de Newton.
- Si un corps est immobile (ou en mouvement rectiligne uniforme), alors la somme des forces qu'il subit, appelée
force résultante, est nulle. (\vec{F} = \vec{0}).
- La force résultante subit par un corps est égale à la masse de ce dernier
multipliée par son accélération. (\vec{F} = m\vec{a}_p).
- Si un corps A subit une force de la part d'un corps B, alors le corps
B subit une force de réaction de sens opposé et de même intensité
(\vec{F}_{BA} = -\vec{F}_{AB}).
La force de gravitation est une force qui apparaît entre tous les objets (ou corps) ayant une masse. Elle régit le mouvements des objets massifs (planètes, étoiles, trou noir, galaxies...). La force de gravité causée par un corps B et subie par un corps A s'obtient avec la formule suivante :
où
Les orbites planétaires
Les planètes, dont la terre, tournent autour du soleil (ce n'est pas la terre le centre du système solaire comme on le croyait il y a longtemps).
L'orbite d'une planète n'est pas un cercle parfait, il s'agit en réalité d'une ellipsoïde. Cette orbite ellipsoïdale est définie par trois paramètres :
- Le demi-grand axe (aen mètres, à ne pas confondre avec l'accélération\vec{a}),
- Le demi-petit axe (ben mètres),
- L'excentricité (esans unités).
Sur la figure \ref{fig:e}, vous observez différentes orbites pour différentes valeurs de
Simulation d'un système planétaire
Idée générale
Dans notre simulation, nous représenterons un système planétaire inspiré de notre système solaire où toutes les planètes sont sur le même plan (ce qui est une assez bonne approximation de ce qui se passe dans notre système solaire). Au centre nous aurons une étoile (fixe, encore une approximation) et un certain nombre de planètes qui orbitent autour de cette dernière.
Pour simuler un système planétaire, on peut effectuer les étapes suivantes:
- Créer une étoile au centre de notre domaine.
- On ajoute autant de planètes que l'on désire autour de l'étoile.
- On définit nos conditions initiales (en particulier la vitesse de chaque planète).
- On affiche puis on simule l'évolution :
- [On affiche notre système (\vec{x}_p(t)).]{#here4}
- On calcule la force résultante sur chacune des planètes.
- On calcule la prochaine position de chacune des planètes (\vec{x}_p(t + \Delta t)).
- On met à jour la position des planètes de notre système.
- On revient à l'étape 4.1.
- [On affiche notre système (
Évolution
Concentrons nous tout d'abord sur l'évolution de la simulation (nous verrons les conditions initiales dans un second temps). Pour déterminer les informations nécessaires, on commence par calculer la force résultante sur la planète
où
Ensuite, on calcule la nouvelle position à partir de sa position actuelle et de sa position précédente (on a également vu ça en cours). Pour ce faire, on reprend les équations du mouvement uniformément accéléré on a:
Avec
En additionnant les deux équations de \eqref{eq:verlet}, on obtient :
On remarque donc qu'il n'est pas nécessaire de retenir l'évolution de
Conditions initiales
Si l'on regarde \eqref{eq:mouvement}, on remarque que pour calculer
Commençons par
où
Par conséquent, puisque que nous connaissons la vitesse à la périhélie, nous placerons intelligemment la position initiale de la planète p, \vec{x}_p(0), à la périhélie. Pour \vec{a}_p(0), on peut le calculer de la même manière qu'avec n'importe quelle autre valeur de t.
Dans votre simulation vous utiliserez des données en mètres, vous aurez donc vraisemblablement (vu l'échelle cosmique) des valeurs en millions de kilomètres. Lors d'un précédent travail pratique, vous avez implementé une fonction permettant de convertir un vecteur en deux dimensions \vec{r}\in\{[-1;1]\}^2 en coordonnées d'écran \vec{c}\in\{[0;lignes[\}\times\{[0;colonnes[\}. Pour obtenir un vecteur \vec{r}, vous devrez définir le rayon de votre écran en mètres R_S (p.ex : 110% du demi-grand axe de l'orbite de la planète la plus éloignée de l'étoile). Puis à partir de votre vecteur position en mètres \vec{x}_p, vous obtiendrez la nouvelle position \vec{r} = \frac{\vec{x}_p}{R_S}. Vous pourrez ensuite convertir cette position en coordonnées d'écran \vec{c} grâce à votre fonction.
Énoncé
Dans le cadre de ce travail pratique, vous allez devoir implementer une simulation de système planétaire semblable à notre système solaire. Pour cela vous avez à votre disposition un squelette de code nommé skeleton.tar
. Ce squelette est uniquement là dans le but de vous aider. Vous pouvez donc vous en passer (ce que je vous déconseille). En revanche, vous devez impérativement utiliser la méthode et les équations présentées dans la partie théorique de cet énoncé.
Si toutefois vous décidiez de prendre ce squelette (excellente décision, je vous en félicite), une fois téléchargé et décompressé, vous devrez effectuer les actions suivantes :
- Remplacer le fichier
skeleton/vec2/vec2.c
par celui que vous avez réalisé durant un précédent travail pratique. - Prendre connaisance des fichiers
skeleton/planet/planet.h
etskeleton/main.c
. Ces fichiers contiennent des commentaires pour vous guider. - Réaliser le travail pratique.
Ce travail est séparé en deux parties, qui valent respectivement 4.5 et 1.5 points (Pour un total de 6 (c'est dingue !!!)).
La première partie, consiste à simuler un système planétaire avec les quatres premières planètes (par ordre de distance) du système solaire (Mercure, Vénus, Terre (souriez, vous êtes simulé), Mars).
Dans un second temps vous devrez ajouter quelques planètes fictives (\geq 2), et essayez de faire varier les différents paramètres. C'est à dire :
- La masse
- La distance à l'étoile
- La forme de l'orbite en changeant la vitesse initiale via le demi-grand axe et l'excentricité.
Pour dessiner vos planètes et votre étoile, vous pouvez utiliser la fonction
draw_full_circle
qui a été ajoutée à cette occasion dans la librairie
skeleton/gfx
. Elle prend en paramètre un contexte SDL, un centre, un rayon et une couleur.
Pour que votre simulation marche, vous serez amené, à un moment ou à un autre, à devoir mettre des données (position de vos planètes, choix du \Delta t, masse, etc...). Vous devez dans le cadre de ce travail aller chercher ces données, et ce dans les bonnes unités (p.ex : distance en mètre et non en années lumière). Vous devrez indiquer dans votre rapport les données choisies (dans les bonnes unités) et leur source.
Travail à rendre par groupe de deux (strictement égal à deux)
-
Un rapport succint (moins de 6 pages) présentant le travail réalisé, avec des images de ce dernier.
-
Le repos git contenant le code réalisé.
-
(Bonus) Une vidéo du résultat, si vous réussissez à créer un système cool avec une musique épique!
Ce travail est à rendre pour le 17.12.2022 à 23h59 au plus tard!