Skip to content
Snippets Groups Projects
Commit 030e2065 authored by florian.burgener's avatar florian.burgener
Browse files

Refactoring

parent 5ad07d3f
Branches
No related tags found
No related merge requests found
......@@ -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);
}
......@@ -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
......@@ -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);
}
}
......@@ -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();
......
......@@ -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);
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment