diff --git a/README.md b/README.md index 8d5ccd2a2f8030cce71f672446070fd52e43562d..f1df46476c2ade347a4b935f1e8838341ae7214f 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,65 @@ # Rapport du travail pratique de physique - Simulation d'un système planétaire -Ce travail est réalisé par M. Gawen ACKERMANN et M. Florian BURGENER, dans le cours du cours de physique appliquée à l'Ingénierie. +Ce travail est réalisé par M. Gawen ACKERMANN et M. Florian BURGENER, dans le cadre cours du cours de Physique appliquée à l'ingénierie 1. ## But Le but de ce projet est de créer une simulation d'un système planétaire, il nous permet notamment d'appliquer les 3 lois de Newton vu dans le cours de Physique ainsi que de manipuler des vecteurs. -## Installation et Compilation +## Installation et compilation -Pour utiliser le simulateur, il faut en premier temps clone ce repository. Ensuite, si ce n'est pas déjà fait, il faut installer OpenGL avec `sudo apt-get install freeglut3-dev`. Une fois ceci fait, il faut compiler le projet à l'aide de la commande puis lancer le programme à l'aide d'un terminal ouvert dans ce même répertoire et de lancer la commande suivante : `./main` +Pour faire fonctionner le programme, il faut impérativement installer la librairie FreeGLUT avec : -## Projet +`sudo apt-get install freeglut3-dev` + +Pour compiler le projet : + +`cd src` +`make` + +Pour éxecuter le projet : + +`./planetary_system` + +## Explications détaillées du projet Afin de mener ce projet à terme, nous avons dû créer certaines de nos structures. De plus, le sujet traitant sur des éléments existants, nous avons fait des recherches afin d'obtenir les informations exactes des diverses : masses, excentricités et périhélies. -### Données +### Données du Soleil et des planètes Mercure, Venus, Terre et Mars -| Nom | Masse | Excentricité | Demi-grand axe | -|:-------------:|:---------------:|:------------:|:----------------:| -| Soleil | 1988500 * 1E24 | / | / | -| Mercure | 0.33010 * 1E24 | 0.2056 | 57.909 * 1E9 | -| Venus | 4.8673 * 1E24 | 0.0067 | 108.209 * 1E9 | -| Terre | 5.9722 * 1E24 | 0.0167 | 149.596 * 1E9 | -| Mars | 0.64169 * 1E24 | 0.0935 | 227.923 * 1E9 | +Comme demandé dans l'énoncé, nous avons effectué des recherches pour obtenir les données réelles du Soleil et des planètes Mercure, Venus, Terre et Mars. Nous avons listé ces données dans le tableau ci-dessous. +| Nom | Masse (en kg) | Excentricité | Demi-grand axe (en m) | +|:-------------:|:---------------:|:------------:|:---------------------:| +| Soleil | 1988500 * 1E24 | / | / | +| Mercure | 0.33010 * 1E24 | 0.2056 | 57.909 * 1E9 | +| Venus | 4.8673 * 1E24 | 0.0067 | 108.209 * 1E9 | +| Terre | 5.9722 * 1E24 | 0.0167 | 149.596 * 1E9 | +| Mars | 0.64169 * 1E24 | 0.0935 | 227.923 * 1E9 | + +* https://nssdc.gsfc.nasa.gov/planetary/factsheet/ * https://nssdc.gsfc.nasa.gov/planetary/factsheet/sunfact.html * https://nssdc.gsfc.nasa.gov/planetary/factsheet/mercuryfact.html * https://nssdc.gsfc.nasa.gov/planetary/factsheet/venusfact.html * https://nssdc.gsfc.nasa.gov/planetary/factsheet/earthfact.html * https://nssdc.gsfc.nasa.gov/planetary/factsheet/marsfact.html +Nous avons aussi ajouté 1 autre planète réelle (Jupiter), 2 satellites (la Lune orbitant autour de la Terre et Apollo 11 orbitant autour de la Lune, pour les observer, il faut zoomer suffisamment tout en suivant la Terre ou la Lune) et 3 fausses planètes (Naboo, Endor, Coruscant). Au total, il y a 1 étoile, 8 planètes et 2 satellites. + ### Fonctionnement #### Système de mise à jour ##### Algorithme -1. Pour tous les objets célèstes, les mettrent à jour - 1. Calcul de l'interval de multiplication (si il y a eu un changement de vitesse de simulation) - 2. Calculer la nouvelle position - 3. Calculer l'accélération grativationnelle - 4. Ajouter l'accélération gravitationnelle - 5. Stocker l'ancienne position - 6. Mettre à jour la position par la nouvelle position - 7. Mettre à jour l'ancienne position - 1. si la distance est supérieure ou égale à un seuil (pour stocker tous les x écarts) -2. Stocker l'interval +1. Pour tous les objets (Mercure, Venus, ... sauf le Soleil), les mettrent à jour + 1. Calculer la nouvelle position (mouvement MRU calculer avec la position précedente et la position actuelle) + 2. Calculer l'accélération grativationnelle subit par l'objet + 3. Ajouter l'accélération gravitationnelle (multiplier par le delta t au carré) + 4. Mettre à jour la position précedente avec la position + 5. Mettre à jour la positionp avec la nouvelle position +6. Mettre à jour l'intervalle précédent qui nous permet de calculer la variation du temps entre deux mise à jour ##### Calcul de l'accélération gravitationnelle @@ -72,11 +85,11 @@ Vector2 calculate_gravitational_acceleration(int32_t object_index, CelestialObje ### OpenGL -#### Afficher un cercle de couleur +#### Afficher un cercle avec OpenGL -On calcul tous les points (sur 360°, donc 360 points) par rapport à un rayon. Ensuite OpenGL lie tous les vertexes ensemble puis ajouter la couleur. +On calcule tous les points (sur 360°, donc 360 points) par rapport à un rayon. Ensuite, OpenGL lie tous les vertex ensemble puis ajouter la couleur. -##### Exemple de code +##### Fonction draw_disc ```c void draw_disc(Vector2 position, int32_t radius) { @@ -93,47 +106,45 @@ void draw_disc(Vector2 position, int32_t radius) { } ``` -La couleur est choisie par rapport à sa valeur hexadécimale : +La couleur est spécifiée par rapport à sa valeur hexadécimale : ```c -int32_t color = object->drawing_color; +int32_t color = 0xFFFFFF; glColor3ub((color & 0xFF0000) >> 16, (color & 0x00FF00) >> 8, (color & 0x0000FF) >> 0); ``` -### Commandes utiles (Interface) +### Fonctionnalités de l'interface -#### Naviguer à travers les objets célestes +#### Suivre la trajectoire d'une planète ou d'un satellite -Pour naviguer à travers les objets célestes, il faut utiliser les `flèches directionnelles horizontales` du clavier. +Pour suivre la trajectoire d'une planète ou d'un satellite, il faut utiliser les `flèches directionnelles horizontales` du clavier. En haut à droite de l'écran, est indiqué quel objet est actuellement suivis. #### Accélérer la simulation -Pour accélerer la vitesse de simulation, il faut utiliser la `flèche du haut` du clavier. Jusqu'à maximum 500 jours par secondes. +Pour accélerer la vitesse de simulation, il faut utiliser la `flèche du haut` du clavier. La vitesse de simulation maximale est de 500 jours par seconde. -#### Decélerrer la simulation +#### Décélérer la simulation -Pour décélerrer la vitesse de simulation, il faut utiliser la `flèche du bas` du clavier. Jusqu'à un minimum de 0, ce qui fige le temps. +Pour décélerrer la vitesse de simulation, il faut utiliser la `flèche du bas` du clavier. La vitesse de simulation minimale est de 0 jour par seconde. -#### Zoomer la simulation +#### Zoomer -Pour agrandir la taille des objets célestes afin d'y voir un peu plus clair, il faut utiliser le `roulement haut de la souris` +Pour observer un plus petit système, comme par exemple le système Terre-Lune, il faut utiliser le `roulement haut de la souris`. -#### Dézoomer la simulation +#### Dézoomer -Pour rapeticir la taille des objets célestes afin de voir le système dans son ensemble, il faut utiliser le `roulement bas de la souris` +Pour observer un plus petit système, comme par exemple le système Terre-Lune, il faut utiliser le `roulement bas de la souris`. #### Afficher / Cacher les noms des objets célèstes Pour Afficher ou Cacher le nom des objets célèstes, il faut appuyer sur la touche `t` +### Résultats -### Résultat - -#### Système solaire - - +#### Système Planétaire (au lancement de l'application) + -#### Terre, Lune, Apollon 11 +#### Système Terre-Lune et Lune-Apollo 11 [GIF] diff --git a/README.pdf b/README.pdf index 5feb380c44fc312b23b799117afeda36100d4000..a41f544c7e9ecbcd92fc6dd9a763575db3d3c861 100644 Binary files a/README.pdf and b/README.pdf differ