diff --git a/README b/README deleted file mode 100644 index 59f8fb0015dfe2f35550678a47552639c71997f0..0000000000000000000000000000000000000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -sudo apt-get install freeglut3-dev diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..332ccb2da867e54417fdd2f3073b4882cc0b3eb2 --- /dev/null +++ b/README.md @@ -0,0 +1,122 @@ + +# Rapport du travail pratique de physique - SolarSystemSimulator + +Ce travail est réalisé par M. Ackermann Gawen et M. Burgener Florian, dans le cours de physique appliquée à l'ingénirie. + +## But + +Le but de ce projet est de réaliser un simulateur de système planétaire. + +## 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 + +| Objet céleste | Masse | Excentricité | Demi-grand axe | +|:-------------:|:---------------:|:------------:|:----------------:| +| Soleil | 1.988900 * 1E30 | / | / | +| Mercure | 0.33018 * 1E24 | 0.20563069 | 579.09227 * 1E8 | +| Venus | 4.8685 * 1E24 | 0.00677323 | 108.208475 * 1E9 | +| Terre | 5.9736 * 1E24 | 0.01671022 | 149.598262 * 1E9 | +| Mars | 0.64185 * 1E24 | 0.09341233 | 227.943824 * 1E9 | + +### Mise en place + +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` + +### Structures + +#### CelestialObject + +Représente un corps céleste tel que : Une planète ou une étoile. + +```c +typedef struct CelestialObject { + double mass; + Vector2 previous_position; + Vector2 current_position; + double semi_major_axis; + double eccentricity; + uint32_t drawing_disc_radius; + uint32_t drawing_color; + Vector2 *points; + int32_t points_length; +} CelestialObject; + +CelestialObject *celestial_object_create(double mass, double semi_major_axis, double eccentricity, uint32_t drawing_disc_radius, uint32_t drawing_color); + +``` + +#### PlanetarySystem + +Représente un système planétaire composé d'une étoile en son centre et des planètes orbitant autour. + +```c +typedef struct { + uint32_t objects_length; + CelestialObject **objects; + double interval; + double zoom_factor; + int32_t reference_frame_object_index; +} PlanetarySystem; + +PlanetarySystem *planetary_system_create(); +void planetary_system_update(PlanetarySystem *planetary_system, double interval); +void planetary_system_draw(PlanetarySystem *planetary_system); +``` + +#### Vector 2 + +Représente un vecteur en 2 dimensions. + +```c +typedef struct Vector2 Vector2; +struct Vector2 { + double x; + double y; +}; + +Vector2 vector2_create(double x, double y); +Vector2 vector2_create_zero(); +bool vector2_is_zero(Vector2 v); +Vector2 vector2_add(Vector2 a, Vector2 b); +Vector2 vector2_substract(Vector2 a, Vector2 b); +Vector2 vector2_multiply(Vector2 v, double scalar); +double vector2_dot_product(Vector2 a, Vector2 b); +double vector2_norm_sqr(Vector2 v); +double vector2_norm(Vector2 v); +Vector2 vector2_normalize(Vector2 v); +bool vector2_is_similiar(Vector2 a, Vector2 b, double epsilon); +Vector2 vector2_fit_canvas(Vector2 v, uint32_t width, uint32_t height); +void vector2_print(Vector2 v); +``` + +### Fonctionnement + +#### Système de mise à jour + +:TODO: +Décrire le système de mise à jour étape par étape + +### Commandes utiles (Interface) + +#### Naviguer à travers les objets célestes + +Pour naviguer à travers les objets célestes, il faut utiliser les `flèches directionnelles horizontales` du clavier. + +#### Accélérer la simulation + +Pour accélerer la vitesse de simulation, il faut utiliser la `flèche du haut` du clavier. + +#### Decélerrer la simulation + +Pour décélerrer la vitesse de simulation, il faut utiliser la `flèche du bas` du clavier. + +#### Zoomer sur les objets célestes + +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` + +#### Dézoomer les objets célestes + +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`