-
orestis.malaspin authoredorestis.malaspin authored
- But
- Théorie
- Rappel théorique
- Les orbites planétaires
- Simulation d'un système planétaire
- Idée générale
- Évolution
- Conditions initiales
- Énoncé
- Validation
- Question de la mort
- Travail à rendre par groupe de deux (strictement égal à deux)
- Quelques remarques sur le rapport
- L'introduction
- Partie théorique
- Résultats
- Conclusion
author:
- El Kharroubi Michaël
- (et un tout petit peu Orestis Malaspinas)
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. ().
- La force résultante subit par un corps est égale à la masse de ce dernier
multipliée par son accélération. ().
- 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é
().
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 (en mètres, à ne pas confondre avec l'accélération),
- Le demi-petit axe (en mètres),
- L'excentricité (sans unités).
Sur la figure @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 (.]{#here4}
- On calcule la force résultante sur chacune des planètes.
- On calcule la prochaine position de chacune des planètes ().
- 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 @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 @eq:mouvement, on remarque que pour calculer
Commençons par
où
Par conséquent, puisque que nous connaissons la vitesse à le périhélie, nous placerons intelligemment la position initiale de la planète p, \vec{x}_p(0), à le 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 connaissance des fichiers
skeleton/celestial_body/celestial_body.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.
Son utilisation nécessite l'installation de la librairie SDL2 (se trouvant dans le paquet libsdl2-dev
sur ubuntu).
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.
Validation
Pensez à valider que votre simulation fonctionne. Il y a différents degrés de validation.
Le premier consiste à observer si les planètes orbitent bien autour du soleil, que leurs orbites ne se croisent pas, qu'elles ne disparaissent pas dans l'infini intersidéral, etc. C'est une validation à l'œil.
Le second est de vérifier que les orbites des planètes se referment bien et après quelle période de temps et comparer avec les valeurs disponibles en ligne.
Question de la mort
Il s'agit ici de déterminer quelle est la planète qui en moyenne est la plus proche de la terre. A vous de déterminer une méthode pour faire cette mesure.
Travail à rendre par groupe de deux (strictement égal à deux)
-
Un rapport succinct (environ 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.01.2024 à 23h59 au plus tard!
Quelques remarques sur le rapport
Le rapport doit être séparé en 3-4 parties principales: l'introduction, une partie description du problème et théorie, une partie résultat, et une partie conclusion.
Chacune de ces parties a ses spécificités, que nous allons rapidement résumer ici.
L'introduction
Cette partie sert à poser le contexte de votre travail. Elle introduit le sujet en donnant un contexte général. Attention, il ne s'agit pas ici d'écrire une banalité du type "on va simuler le système solaire parce que le prof de physique nous l'a demandé". Il faut plutôt expliquer à quoi peuvent servir les simulations numériques, et en particulier celles du système solaire. Puis, dire en quoi consiste votre travail tel que vous pourriez l'expliquer à une personne qui ne connaît pas grand chose à la physique et aux simulations numériques. Finalement, cette partie sert à poser "le plan" de votre travail et répondre à la question "que contient chaque chapitre?". N'hésitez pas à être très factuels: "Le chapitre 2 contient...., le chapitre 3 contient ...".
Partie théorique
Cette partie sert à décrire avec plus de précision le contenu de votre travail d'un point de vue théorique. Quelles sont les équations utilisées? Comment est structuré votre code (pas besoin de mettre du code ici, plutôt décrire les fonctionnalités générales)? Quelles sont les choses importantes à savoir pour reproduire vos simulations? Si cela aide n'hésitez pas à utiliser des images que vous commenterez (une image sans commentaire c'est totalement inutile, car on ne sait pas ce que vous voulez dire avec). Il est très important de décrire toutes les notions dont vous avez besoin pour que la partie résultats soit compréhensible pour la personne qui lit votre travail.
Résultats
Dans cette partie vous décrivez les résultats obtenus. Quelles sont les simulations que vous avez effectuées? Quel est l'état initial de votre simulation? Quels sont les paramètres que vous avez utilisés? Qu'y a-t-il de remarquable dans vos résultats? Sur quelles parties faut-il attirer l'attention du lecteur·trice? Si vous en avez n'hésitez pas à utiliser des images ou des tableaux. Il faut bien entendu commenter les tableaux et images sinon ils sont inutiles.
Conclusion
La première fonction de la conclusion est de rappeler en quoi a consisté votre travail. Ensuite, il est nécessaire de faire ressortir les points importants de vos résultats (quitte à les répéter par rapport à la partie résultats). Il est fortement déconseillé de dire des choses comme "on a beaucoup appris dans ce travail, il était super". Cela n'apporte pas grand chose à votre rapport (mémoire de bachelor dans le futur). Finalement, la conclusion doit ouvrir sur le "futur":
- Comment est-ce que vous pourriez améliorer votre travail?
- Que manque-t-il pour le rendre plus complet?