diff --git a/doc/rapport.md b/doc/rapport.md index c0da4eaf17ecbc00d994f9b99ea1d7521dc3e1a7..348dcc3da9004ae061d45682b586101fab11392e 100644 --- a/doc/rapport.md +++ b/doc/rapport.md @@ -7,7 +7,9 @@ date: 2021-12-21 ... -# Calcul des Forces +# Théorie et Calculs + +## 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}$$ @@ -22,30 +24,46 @@ $$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. +## Calcul de l'Accélération +C'est en utilisant cette la formule précédente que le vecteur accélération (au temps $t$) +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. +## Calcul de la Vitesse +Pour calculer la position suivante de la planète lors de chaque itération, +nous avons la formule suivante, qui exprime la position en fonction du temps: +$$ +\overrightarrow{x}(t + \Delta t) = +\overrightarrow{x_{prec}} + +\Delta t \overrightarrow{v}(t) + +\frac{(\Delta t)^2}{2} \overrightarrow{a}(t) +$$ + + # 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. +De par l'utilisation d'un intervalle de temps, l'évolution du système n'est pas continue. +Cela diffère avec ce qu'on peut observer dans la réalité. On perd donc en précision à ce niveau-là. + +## Observations et Vérifications +Nous avons pu constater que les planètes interagissent +entre elles en plus de subir l'attraction de l'étoile au centre du système. +Ceci a pu être observé lorsqu'une planète s'est vue accélérer **à l'aphélie**, +lors du passage d'une planète fictive relativement massive à proximité. + +## Référentiel +Si on ajoutait des corps suffisamment massifs dans nos tableaux de planètes, +la réalité voudrait que l'étoile centrale voie son vecteur vitesse changer +en fonction des autres corps présents. +Pourtant, dans le cadre de ce travail, nous centrons nôtre référentiel sur +cette étoile. Nous ne calculons donc jamais les modifications de son vecteur vitesse. +Les planètes gravitant autour de cette dernière, aussi massives soient elles +(test effectué avec une masse proche d'un dixième de celle du soleil), +apparaîtront comme tournant autour d'un point fixe. -## 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 @@ -74,13 +92,7 @@ Nous avons créé le fichier **constants.h** pour contenir les valeurs des de chaque planète étudiée. Ces valeurs ont été recueillies sur internet et dans les tables CRM. -{ width=60% margin=auto } - -## Completion des fonctions relatives aux planètes -Compléter le fichier **planet.c** s'est fait par simple traduction des formules -fournies, en code C. A part quelques considérations dues à la gestion des -paramètres par l'ordinateur et une simplification de masses dans le calcul de -l'accélération, nous n'avons fait qu'interpréter les formules de l'énoncé. +{ width=40% margin=auto } ## Ajout de planètes fictives Une fois le système suffisamment robuste, nous avons ajouté quatre planètes @@ -92,13 +104,20 @@ 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. +Une fois l'initialisation terminée, la simulation est lancée. +A chaque itération, qui représente le passage du temps $\Delta t$, +la position de chaque planète est mise à jour. +Après avoir executé tous ces calculs, le corps de la boucle principale se termine par +l'affichage du système, de façon simplifiée +(les rayons des planètes et de l'étoile ne sont pas à l'échelle par souci de +visibilité et facilité de lecture par l'utilisateur). + +## Tests +Nous avons obtenu un système fonctionnel. Ce dernier a été testé pendant plus d'une heure +(avec `DELTA_T = 8000.0`) sans produire de résultat qui semblait physiquement incohérent. -# Difficultés, analyses et optimisations +# Réflexions ## Passage du continu au discret Si les grandeurs physiques avec lesquelles on travaille sont continues, @@ -106,10 +125,8 @@ leur représentation en mémoire d'un ordinateur est limitée en précision. Même si dans le cadre de ce travail, la précision fournie par les `double` est suffisante pour ne pas avoir à s'en inquiéter, nous avons essayé de minimiser le nombre d'opérations effectuées pour le calcul de chaque valeur. -Il reste sans doute d'autres améliorations que nous pourrions apporter -dans ce domaine si le temps nous le permettait. De plus, l'ajout de quelques préventions de divisions par zéro s'est aussi -avéré nécessaire. +avéré nécessaire pour la bonne execution du programme. ## Erreurs de signe Lors de la première compilation et simulation, nous avons noté que les planètes @@ -118,22 +135,11 @@ la cause de cette perturbation n'était autre qu'une inversion malheureuse du signe du vecteur accélération. Une fois le bug identifié, la simulation a été corrigée dans la minute. - -# Résultats - -## Tests -Nous avons obtenu un système fonctionnel. Ce dernier a été testé pendant plus -d'une heure sans produire de résultat qui semblait physiquement incohérent. - - - -## Améliorations possibles -Si toutes les contraintes physiques ont été gérées, il serait souhaitable de -simplifier l'utilisation de ce programme et de le rendre plus dynamique: -possibilité de rajouter des planètes en cours de route, -d'observer leurs paramètres, ainsi qu'un nettoyage supplémentaire du code -seraient agréables (pour l'utilisateur, du moins). - -### Remarques -Il est très satisfaisant d'observer la brève accélération d'une planète à son -aphélie due au passage d'une planète fictive très dense à proximité. +## Améliorations Logicielles Possibles +En ce qui concerne les structures de données utilisées, peut être que l'utilisation +de listes chaînées au lieu de tableaux pourrait faciliter la modification des +paramètres du système, sans augmenter le temps d'execution *théorique* +(en pratique, les tableaux restent plus efficaces). +Les données de l'étoile et des planètes, quant à elles devraient être chargées depuis +un fichier de paramètres ou à la rigueur, l'entrée standard (utilisable avec un "pipe"), +pour des questions de design.