# Rapport du travail pratique "Simulation d'un système planétaire"
# Rapport du travail pratique "Simulation d'un système planétaire"
Ce travail pratique sur la "Simulation d’un système planétaire sur un plan à l’aide des lois de Newton" 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 (ISC_123).
Ce travail pratique sur la "Simulation d’un système planétaire sur un plan à l’aide des lois de Newton" est réalisé par M. Gawen ACKERMANN et M. Florian BURGENER, dans le cadre du cours de Physique appliquée à l'ingénierie 1 (ISC_123).
## But
## But
Le but de ce travail pratique 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. La première partie de ce travail consiste à avoir 4 planètes : Mercure, Vénus, Terre et Mars ; en orbite autour du Soleil (en fonction des vraies valeurs et des lois physiques bien sûr). La deuxième partie consiste à ajouter plusieurs autres planètes avec des valeurs qui n'existent pas.
Le but de ce travail 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. La première partie de ce travail consiste à avoir 4 planètes : Mercure, Vénus, Terre et Mars ; en orbite autour du Soleil (en fonction des vraies valeurs et des lois physiques bien sûr). La deuxième partie consiste à ajouter plusieurs autres planètes avec des valeurs qui n'existent pas.
## Installation
## Installation
Nous avons pris la décision de changer de librairie graphique (en accord avec l'enseignant) afin d'avoir des meilleures performances de rendu. La librairie que nous avons choisi d'utiliser est FreeGLUT basé sur OpenGL.
Nous avons pris la décision de changer de librairie graphique (en accord avec l'enseignant) afin d'avoir de meilleures performances de rendu. La librairie que nous avons choisi d'utiliser s'appelle FreeGLUT et est basée sur OpenGL.
Pour pouvoir compiler le projet, il faut donc impérativement installer la librairie FreeGLUT avec la commande suivante :
Pour pouvoir compiler le projet, il faut donc impérativement installer la librairie FreeGLUT avec la commande suivante :
...
@@ -19,11 +18,11 @@ Pour compiler le projet, il faut premièrement se rendre dans le dossier du code
...
@@ -19,11 +18,11 @@ Pour compiler le projet, il faut premièrement se rendre dans le dossier du code
`cd src`
`cd src`
puis exécuter la commande make afin de compiler automatiquement le projet
puis exécuter la commande make afin de compiler automatiquement le projet :
`make`
`make`
Pour exécuter le projet, exécuter la commande suivante :
Pour lancer le projet, exécuter la commande suivante :
`./planetary_system`
`./planetary_system`
...
@@ -49,7 +48,7 @@ Nous vous conseillons vivement de regarder la vidéo (en annexe de ce rapport) q
...
@@ -49,7 +48,7 @@ Nous vous conseillons vivement de regarder la vidéo (en annexe de ce rapport) q
### Données du Soleil et des planètes Mercure, Venus, Terre et Mars
### Données du Soleil et des planètes Mercure, Venus, Terre et Mars
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.
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 de l'objet céleste | Masse (en kg) | Excentricité | Demi-grand axe (en m) |
| Nom de l'objet céleste | Masse (en kg) | Excentricité | Demi-grand axe (en m) |
@@ -72,59 +71,64 @@ Nous avons aussi ajouté 1 autre planète réelle (Jupiter), 2 satellites (la Lu
...
@@ -72,59 +71,64 @@ Nous avons aussi ajouté 1 autre planète réelle (Jupiter), 2 satellites (la Lu
### Fonctionnement de la simulation
### Fonctionnement de la simulation
#### Calcule de la nouvelle position et de l'accélération appliquer à chaque Δt sur chaque objet céleste
#### Calcul de la nouvelle position et de l'accélération appliquée à chaque Δt sur chaque objet céleste
##### Initialisation
##### Initialisation
1. Pour chaque objet céleste ;
1. Pour chaque objet céleste à créer ;
1. Création de l'objet céleste en appelant la fonction `celestial_object_create` ;
1. Création de l'objet céleste en appelant la fonction `celestial_object_create` ;
1. (dans la fonction `celestial_object_create`) ;
1. (dans la fonction `celestial_object_create`) ;
2. Calcule du périapside en fonction du demi-grand axe et de l'excentricité.
2. Calcul du périapside en fonction du demi-grand axe et de l'excentricité.
<br>
<br>
1. Pour chaque objet céleste (excepté le Soleil) ;
1. Pour chaque objet céleste (excepté le Soleil) ;
1. Calcule de la première position en appelant la fonction `celestial_object_first_update` ;
1. Calcul de la première position en appelant la fonction `celestial_object_first_update` ;
1. (dans la fonction `celestial_object_first_update`) ;
1. (dans la fonction `celestial_object_first_update`) ;
2. Calcule de la vitesse au périapside ;
2. Calcul de la vitesse au périapside ;
3. Calcule de la vélocité en multipliant la vitesse à la norme du vecteur perpendiculaire à la distance entre l'objet céleste et le Soleil ;
3. Calcul de la vélocité en multipliant la vitesse à la norme du vecteur perpendiculaire à la distance entre l'objet céleste et le Soleil ;
4. Calcule de l'accélération subit par l'objet céleste ;
4. Calcul de l'accélération subit par l'objet céleste ;
5. Calcule de la nouvelle position en fonction de la vitesse au périapside et l'accélération subit par l'objet céleste ;
5. Calcul de la nouvelle position en fonction de la vitesse au périapside et l'accélération subit par l'objet céleste ;
1. Notez que le Δt est de 1 seconde pour l'initialisation.
1. Notez que le Δt est de 1 seconde pour l'initialisation.
##### À chaque mise à jour
##### À chaque mise à jour
1. Pour chaque objet céleste (excepté le Soleil) ;
1. Pour chaque objet céleste (excepté le Soleil) ;
1. Calcule de la position en appelant la fonction `celestial_object_update` ;
1. Calcul de la position en appelant la fonction `celestial_object_update` ;
1. (dans la fonction `celestial_object_update`) ;
1. (dans la fonction `celestial_object_update`) ;
2. Calcule de la variation du Δt (`interval / previous_interval`) ;
2. Calcul de la variation du Δt (`interval / previous_interval`) ;
1. Notez que le `previous_interval` correspond au Δt précèdent tandis que la variable `interval` correspond au Δt actuelle, à l'initialisation la variable `previous_interval` vaut 1 seconde, si le prochain Δt est de 100 secondes alors la "vitesse" sera multiplié par 100 / `previous_interval` pour garder la cohérence du MRU ;
1. Notez que le `previous_interval` correspond au Δt précèdent tandis que la variable `interval` correspond au Δt actuel, à l'initialisation la variable `previous_interval` vaut 1 seconde, si le prochain Δt est de 100 secondes alors la "vitesse" sera multiplié par 100 / `previous_interval` pour garder la cohérence du MRU ;
3. Calcule de la nouvelle position en fonction de la position, de la position précédente et de la variation du Δt (**1e loi de Newton**) ;
3. Calcul de la nouvelle position en fonction de la position, de la position précédente et de la variation du Δt (**1e loi de Newton**) ;
4. Calcule de l'accélération subit par l'objet céleste ;
4. Calcul de l'accélération subit par l'objet céleste ;
5. Conversion de l'accélération en distance en fonction du Δt et ajout de cette distance à la nouvelle position.
5. Conversion de l'accélération en distance en fonction du Δt et ajout de cette distance à la nouvelle position.
##### Calcul de l'accélération subit par un objet céleste
##### Calcul de l'accélération subit par un objet céleste
La **3e loi de Newton** nous permet de calculer la force subit entre 2 objets célestes. Nous avons utilisé la loi universelle de la gravitation et la **2e loi de Newton** pour calculer l'accélération subit par un objet céleste.
Par la **3e loi de Newton** $`\vec{F}_{BA} = - \vec{F}_{AB}`$, autrement dit une force subit sur un corps A par un corps B est subit en réaction sur le corps B avec la même intensité et dans le sens opposé.
Nous avons utilisé la loi universelle de la gravitation et la **2e loi de Newton** pour calculer l'accélération subit par un objet céleste (noté $`objet_2`$).
2e loi de Newton : $`\vec{F}_{Newton} = m \cdot \vec {a}`$
2ème loi de Newton : $`F = m \cdot a`$
Loi universelle de la gravitation : $`\vec{F}_{Gravité} = G \frac{m_1 m_2}{\lVert \vec{r} \rVert^2} \hat{r}`$
Loi universelle de la gravitation : $`\frac{G \cdot m_1 \cdot m_2}{r^2}`$
Soit un $`corps_1`$ et un $`corps_2`$, l'accélération subit par le $`corps_2`$ est : $`\vec{F}_{Newton} = \vec{F}_{Gravité} \iff m_2 \cdot \vec{a}_2 = G \frac{m_1 m_2}{\lVert \vec{r} \rVert^2} \hat{r} \iff \vec{a}_2 = G \frac{m_1}{\lVert \vec{r} \rVert^2} \hat{r}`$
3. On ajoute $`\vec{a}_i`$ à $`\vec{a}`$ subit par l'$`objet_2`$.
### OpenGL
### OpenGL
#### Afficher un cercle avec OpenGL
#### Afficher un cercle avec OpenGL
Puisque nous avons changé de librairie graphique, nous avons dû recréer une fonction permettent de dessiner un disque. Pour dessiner le disque, on calcule tous les points sur 360° (donc 360 points) par rapport à un rayon. Ensuite, OpenGL s'occupe de remplir le polygone avec la bonne couleur.
Puisque nous avons changé de librairie graphique, nous avons dû recréer une fonction permettant de dessiner un disque. Pour dessiner le disque, on calcule tous les points sur 360° (donc 360 points) par rapport à un rayon. Ensuite, OpenGL s'occupe de remplir le polygone avec la bonne couleur.
#### Suivre la trajectoire d'une planète ou d'un satellite
#### Suivre la trajectoire d'une planète ou d'un satellite
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.
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 suivi.
#### Accélérer la vitesse de la simulation
#### Accélérer la vitesse de la simulation
...
@@ -181,4 +185,4 @@ Pour afficher ou cacher le nom des objets célestes, il faut appuyer sur la touc
...
@@ -181,4 +185,4 @@ Pour afficher ou cacher le nom des objets célestes, il faut appuyer sur la touc
### Raisons pour lesquelles nous pensons que notre simulation fonctionne correctement
### Raisons pour lesquelles nous pensons que notre simulation fonctionne correctement
Pour vérifier que notre simulation fonctionne correctement, nous avons laissé tourner la simulation durant 100 ans et avons récupéré le périhélie et aphélie des planètes Mercure, Venus, Terre et Mars et les avons comparer au vrai périhélie et aphélie. En comparant ses valeurs nous avons pu observer qu'elles étaient très proche entre elle et avons donc conclu que notre simulation fonctionne correctement.
Pour vérifier que notre simulation fonctionne correctement, nous avons laissé tourner la simulation durant 100 ans et avons récupéré le périhélie et aphélie des planètes Mercure, Venus, Terre et Mars et les avons comparés aux vrais périhélie et aphélie. Nous avons pu observer que nos valeurs étaient très proche de la réalité et avons donc conclu que notre simulation fonctionne correctement.