diff --git a/doc/rapport.md b/doc/rapport.md index 0fe27c3d5210f00ec9be7a3f3a28e0dc76f02f4e..c0da4eaf17ecbc00d994f9b99ea1d7521dc3e1a7 100644 --- a/doc/rapport.md +++ b/doc/rapport.md @@ -7,22 +7,66 @@ date: 2021-12-21 ... -# Méthode +# Calcul des Forces +Chaque corps subit les forces d'attraction des autres corps présents. +On a la formule pour calculer la force entre deux masses: +$$F = \frac{G \times M \times m}{r^2}$$ +La force résultante sur la masse $m$ est donc: +$$F_{res \rightarrow m} = \sum_{i \in autres corps} \frac{G \times M_i \times m}{r^2}$$ +On applique la deuxième loi de Newton: +$$F = m \times a$$ +Toujours avec $m$, la masse du corps qui subit la force, on pose, par $F = F$: +$$m \times a = \frac{G \times M \times m}{r^2}$$ +On simplifie par la masse du corps étudié, comme suit: +$$a = \frac{G \times M}{r^2}$$ +Ainsi, on peut directement calculer le vecteur accélération "résultant": +$$a_{res \rightarrow m} = \sum_{i \in autres corps} \frac{G \times M_i}{r^2}$$ + +## Application +C'est en utilisant cette dernière formule que le vecteur accélération a été calculé, +de façon itérative, par un suite d'additions de vecteurs. +Ainsi, notre programme ne comporte aucune représentation de vecteur force. + + +# Analyse des Résultats + +## Simulation +De par la contrainte imposée par l'utilisation d'un intervalle de temps, +l'évolution du système n'est pas continue. +En réalité en revanche, les forces en jeu s'appliquent de manière continue, +on perd donc en précision à ce niveau-là. + +## Calculs +On essaie de limiter le nombre de calculs. +Une simplification mathématique (des masses), comme mentionné plus haut, +y contribue. + +## Observation de l'Affichage +Nous avons pu constater que, comme il se doit, les planètes interagissent bien entre elles +et non seulement avec l'étoile, au centre du système. +Ceci a pu être observé lorsqu'une planète a subi une accélération soudaine **à l'aphélie**, +due au passage d'une planète fictive relativement massive à proximité. + + +# L'Aspect Informatique ## Décomposition du Problème Nous avons adopté une approche de bas en haut ("bottom-to-top"). Nous avons décomposé le problème aussi précisément que possible en nous inspirant des prototypes proposés avant d'écrire la moindre ligne de code. -## Adaptation de la lib vec2 +## Adaptation du code Existant Au fichiers de `vec2`, nous avons ajouté la méthode `vec2_to_coordinates_centered(vec2 v, uint32_t width, uint32_t height)` qui agit de façon similaire à `vec2_to_coordinates(vec2 v, uint32_t width, uint32_t height)` mais fait correspondre au vecteur (0,0) le centre de l'écran. -Ainsi, en plus d'accepter des vecteurs de norme comprise dans [0;1], -elle accepte des arguments de norme dans [-1;+1], ces dernières étant facteurs +Ainsi, en plus d'accepter des vecteurs de norme comprise dans \[0;1\], +elle accepte des arguments de norme dans \[-1;+1\], ces dernières étant facteurs de demi-dimensions de l'écran en partant du centre de l'écran (l'origine). +En plus de cela, une fonction +`vec2 calc_prev_position(const double star_mass, const vec2 pos, const double ecc, const double axm, const double delta_t)` +a été implémentée pour séparer le calcul de la vitesse initiale des planètes du reste du code. ## Recueil des valeurs physiques relatives aux planètes Nous avons créé le fichier **constants.h** pour contenir les valeurs des @@ -41,12 +85,18 @@ l'accélération, nous n'avons fait qu'interpréter les formules de l'énoncé. ## Ajout de planètes fictives Une fois le système suffisamment robuste, nous avons ajouté quatre planètes à notre système. Ces dernières interagissent avec tous les autres objets de -la simulation, comme il se doit, mais sont séparées au niveau informatiques. +la simulation, comme il se doit, mais sont séparées au niveau informatique. Ainsi, il serait facile de revenir à un système plus proche de la réalité en ne modifiant que peu de lignes de code. Toutes les planètes fictives sont affichées en vert, pour les dissocier des planètes réelles. +## Déroulement du Programme +Le principe de cette simulation est de mettre à jour les variables du système +après chaque intervalle de temps (constant) $\Delta t$. +A chaque itération, on calcule la position des planètes au temps $t + \Delta t$ +après application des forces. + # Difficultés, analyses et optimisations