Commit 2c12d1db authored by gawen.ackerman's avatar gawen.ackerman
Browse files

add enonce

parents
# Travail pratique de programmation séquentielle en C
## Élèves concernés / Participants
* Ackermann Gawen
* Dymarczyk Dawid
* Moscheni Romain
* Ho William
* Rüegger Yann
## Énoncé
### Nom du projet
Galaxie
### Mise en contexte
De nos jours, à l'aide de simulateur d'orbite, nous pouvons prédire les mouvements d'objets célestes. Par conséquent, anticiper les dangers qu'une collision entre deux corps pourrait engendrer.
![Système solaire](img/solar_system.jpeg "Système solaire")
### Objectif
Le but de ce projet est de mettre en application les lois fondamentales de Newton ainsi que l'algorithme de Barnes-Hut dans une simulation de la galaxie ce qui nous permettera de faire de la détection de collision.
#### Les lois fondamentales de Newton
Les lois fondamentales de Newton se décomposent en 3 parties disctinctes.
##### Inertie
L'inertie est le comportement naturel d'un corps se déplaçant en ligne droite à vitesse constante. En l'absence d'influences extérieures, le mouvement d'un corps préserve est inchangé.
##### Dynamique
La dynamique représente le momentum, dépendant de sa masse, sa vitesse et sa direction.
$F = m \vec{a}$
##### Réciproque / Action-réaction
La réciproque, comme son nom l'indique, va exercer une force opposée strictement équivalente à celle subit.
$F_{ab} \rArr -F_{ba}$
#### L'algorithme de Barnes-Hut
L'algorithme de Barnes-Hut est utilisé afin d'approximer des simulations à $n$ corps. Il utilise le principe de subdivisions utilisé par les arbres quaternaires. Chaque cellule sera une approximation moyenne des éléments présent. Si cette valeur est plus petite qu'une valeur arbitraire, on rassemble l'ensemble des valeurs présentent dans les cellules pour n'en former plus qu'une, afin de réduire les calculs à effectuer.
![Arbre de Barnes-Hut](img/bh_tree.svg "Un arbre de Barnes-Hut")
### Condition initiale
Il y a deux états initials possible.
Le premier étant un cas manuellement construit afin de générer une collision.
Le second étant un placement aléatoire des objets céleste dans l'univers.
### Cahier des charges
#### Simulation de galaxie
* Reprendre la travail pratique effectué en Physique
#### Arbre quaternaire
* Implémenter l'arbre quaternaire
* Création
* Insertion
* Parcours
* Compression
* Conversion d'arbre quaternaire en matrice
* Créer des sous-univers contenant les objets célestes
* Tant que la taille de notre univers divisé par 4 n'est pas 0
* Subdiviser et placer les éléments de la taille de l'univers divisé par 4 dans les cellules correspondantes (SG, SD, IG, ID)
* Calculer la masse totale d'un univers
* Pour chaque objets célestes additionner leurs masses puis faire la moyenne
* Calculer le centre de masse d'un univers
* Pour chaque objet céleste, sommmer la multiplication de sa masse par sa position x divisé par la somme des masses de l'univers tel que :
* $\frac{m_ax_a+m_bx_b+m_cx_c+..}{m_a+m_b+m_c+...}$
* Calculer l'ensemble des forces d'un univers
* Pour chaque objets célestes calculer l'ensemble des forces
* Calculer l'accélération gravitationnelle
* $\frac{Gm}{r²}$ $G$ étant la constante de gravitation, $m$ la masse de l'objet céleste et $r$ son rayon
* Additionner l'accélération multipliée à l'interval ($\Delta t$) au carré à la position courante
* Vérifier si l'univers peut-être compressé (fusion de cellules)
* Si la masse moyenne des univers soustraits à la masse total de l'univers donne un chiffre plus petit qu'une valeur arbitraire, alors les 4 univers se transforment en 1
#### Affichage
Pour la partie graphique de notre application, nous avons décidé d'utiliser la bibliothèque graphique `SDL2`.
* Afficher des objets célestes
* Utiliser la fonction de dessin de disque de couleur
## Types de données
### Structures
À noter que les structures ci-dessous sont définit pour notre utilisation.
#### Vecteur en deux dimensions
Un vecteur en deux dimensions est définit par ses composantes $x$ et $y$.
```c
typedef struct vector2D_t {
double x, y;
} vector2D;
```
#### Objet céleste
Un objet céleste est définit par une masse en kilogramme, une vitesse en un vecteur à deux dimensions, un vecteur directeur, son demi-grand axe ainsi que son eccentricité.
```c
typedef struct celestial_object_t {
vector2D initial_position;
vector2D acceleration;
double mass;
double semi_major_axis;
double eccentricity;
int drawing_disc_radius;
int drawing_colour;
} celestial_object;
```
#### Univers
Un univers ou cellule est définit par un tableau d'objets célestes et d'un vecteur à deux dimension représentant sa taille.
```c
typedef struct universe_t {
celestial_object* celestial_objects;
} universe;
```
#### Arbre quaternaire
Un arbre quaternaire se compose d'une liste d'objets céleste, d'une masse moyenne, de son centre de masse ainsi que de noeuds représentant les univers.
```c
typedef struct quadtree_t {
node childs[4];
universe cell;
double childs_mass_average;
double center_of_mass;
} node;
```
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment