diff --git a/CelestialObject.c b/CelestialObject.c index b94e79268d28fa5d2e12170c503c5fa221896440..1d8298086abdbcc2c81574f0ad633b27402e013c 100644 --- a/CelestialObject.c +++ b/CelestialObject.c @@ -2,8 +2,8 @@ #include <GL/glut.h> #include <stdlib.h> +#include <string.h> -#include "PlanetarySystem.h" #include "drawing.h" #define G 6.67e-11 @@ -29,29 +29,30 @@ CelestialObject *celestial_object_create(char *name, double mass, double semi_ma return object; } -void draw_celestial_object(PlanetarySystem *planetary_system, int32_t i, Vector2 reference_frame) { - CelestialObject *object = planetary_system->objects[i]; - Vector2 scaled_position = scale_position(planetary_system, object->current_position, reference_frame); +void draw_celestial_object(CelestialObject *object, Vector2 reference_frame, double zoom_factor) { + Vector2 scaled_position = scale_position(zoom_factor, object->current_position, reference_frame); uint32_t color = object->drawing_color; glColor3ub((color & 0xFF0000) >> 16, (color & 0x00FF00) >> 8, (color & 0x0000FF) >> 0); - if (planetary_system->zoom_factor < 1) - draw_disc(scaled_position, object->drawing_disc_radius * planetary_system->zoom_factor); + if (zoom_factor < 1) + draw_disc(scaled_position, object->drawing_disc_radius * zoom_factor); else draw_disc(scaled_position, object->drawing_disc_radius); - if (i != 5) { + if (strcmp(object->name, "Moon") != 0) { glLineWidth(4.0); for (int32_t j = 0; j < object->points_length - 1; j += 1) { - Vector2 p1 = scale_position(planetary_system, object->points[j], reference_frame); - Vector2 p2 = scale_position(planetary_system, object->points[j + 1], reference_frame); + Vector2 p1 = scale_position(zoom_factor, object->points[j], reference_frame); + Vector2 p2 = scale_position(zoom_factor, object->points[j + 1], reference_frame); draw_line(p1, p2); } } - if (i == 5 && planetary_system->zoom_factor < 36) + if (strcmp(object->name, "Moon") == 0 && zoom_factor < 36) { return; + } + draw_text(object->name, scaled_position); } diff --git a/CelestialObject.h b/CelestialObject.h index 84de0d456339bc8836114e36e9feef894c8b6060..02b013e7fe80d479b1a4fb1bc9cefbb3ca0a3426 100644 --- a/CelestialObject.h +++ b/CelestialObject.h @@ -3,7 +3,6 @@ #include "Vector2.h" -typedef struct PlanetarySystem PlanetarySystem; typedef struct CelestialObject { double mass; Vector2 previous_position; @@ -18,6 +17,6 @@ typedef struct CelestialObject { } CelestialObject; CelestialObject *celestial_object_create(char *name, double mass, double semi_major_axis, double eccentricity, uint32_t drawing_disc_radius, uint32_t drawing_color); -void draw_celestial_object(PlanetarySystem *planetary_system, int32_t i, Vector2 reference_frame); +void draw_celestial_object(CelestialObject *object, Vector2 reference_frame, double zoom_factor); #endif diff --git a/PlanetarySystem.c b/PlanetarySystem.c index 24c0f356578ac928865c8cd5efa9013c332f1b3d..eac70b63b614fe6316969e1b43cd535bf7b87f78 100644 --- a/PlanetarySystem.c +++ b/PlanetarySystem.c @@ -41,6 +41,9 @@ PlanetarySystem *planetary_system_create() { planetary_system->zoom_factor = 1; planetary_system->reference_frame_object_index = 0; + char names[][100] = {"", "Mercury", "Venus", "Earth", "Mars", "Moon", "Naboo", "Jupitaire", "Endor"}; + double masses[] = {MERCURY_MASS, VENUS_MASS, EARTH_MASS, MARS_MASS, 0, 0, 0, 0}; + // Sun planetary_system->objects[0] = celestial_object_create("", SUN_MASS, 0, 0, 50, 0xFFFFFF); // Mercury @@ -138,6 +141,7 @@ void planetary_system_draw(PlanetarySystem *planetary_system) { Vector2 reference_frame = planetary_system->objects[planetary_system->reference_frame_object_index]->current_position; for (uint32_t i = 0; i < planetary_system->objects_length; i += 1) { - draw_celestial_object(planetary_system, i, reference_frame); + CelestialObject *object = planetary_system->objects[i]; + draw_celestial_object(object, reference_frame, planetary_system->zoom_factor); } } diff --git a/Vector2.h b/Vector2.h index 5193d60d64997442db950d8b138b51541b128827..59e09d219f04d95537afa6b2ce8793ad099a8abf 100644 --- a/Vector2.h +++ b/Vector2.h @@ -4,11 +4,10 @@ #include <stdbool.h> #include <stdint.h> -typedef struct Vector2 Vector2; -struct Vector2 { +typedef struct Vector2 { double x; double y; -}; +} Vector2; Vector2 vector2_create(double x, double y); Vector2 vector2_create_zero(); diff --git a/drawing.c b/drawing.c index 9b073626dc29f43011d887d01d85e266c6465eb6..a8a799b6a5594676d729351b987085443e933a07 100644 --- a/drawing.c +++ b/drawing.c @@ -35,9 +35,9 @@ void draw_text(char *text, Vector2 position) { } } -Vector2 scale_position(PlanetarySystem *planetary_system, Vector2 object_position, Vector2 reference_frame_position) { +Vector2 scale_position(double zoom_factor, Vector2 object_position, Vector2 reference_frame_position) { Vector2 unscaled_position = vector2_substract(object_position, reference_frame_position); - unscaled_position = vector2_multiply(unscaled_position, planetary_system->zoom_factor); + unscaled_position = vector2_multiply(unscaled_position, zoom_factor); Vector2 scaled_position = vector2_multiply(unscaled_position, 1.0 / (300 * 1E9)); scaled_position = vector2_fit_canvas(scaled_position, SCREEN_WIDTH, SCREEN_HEIGHT); diff --git a/drawing.h b/drawing.h index 447c2a2a9faa7c3640f78809aa06f2b6ef51d35d..b9de5c9cee093c4a22b3eb6b108bf8991f249096 100644 --- a/drawing.h +++ b/drawing.h @@ -3,12 +3,11 @@ #include <stdint.h> -#include "PlanetarySystem.h" #include "Vector2.h" void draw_disc(Vector2 position, uint32_t radius); void draw_line(Vector2 a, Vector2 b); void draw_text(char *text, Vector2 position); -Vector2 scale_position(PlanetarySystem *planetary_system, Vector2 object_position, Vector2 reference_frame_position); +Vector2 scale_position(double zoom_factor, Vector2 object_position, Vector2 reference_frame_position); #endif