Skip to content
Snippets Groups Projects
Commit 32d0208e authored by Florian Burgener's avatar Florian Burgener
Browse files

Move functions

parent 58922599
Branches
No related tags found
No related merge requests found
......@@ -8,7 +8,7 @@
#include "drawing.h"
const double G = 6.67430 * 1E-11;
const int32_t PREVIOUS_POSITIONS_MAXIMUM_LENGTH = 200;
const int32_t PREVIOUS_POSITIONS_MAXIMUM_LENGTH = 300;
CelestialObject *celestial_object_create(char *name, double mass, double semi_major_axis, double eccentricity, int32_t drawing_disc_radius, int32_t drawing_color) {
CelestialObject *object = (CelestialObject *)malloc(sizeof(CelestialObject));
......@@ -37,6 +37,30 @@ void celestial_object_destroy(CelestialObject *object) {
free(object);
}
int32_t get_zoomed_drawing_disc_radius(CelestialObject *object, double zoom_factor) {
if (zoom_factor < 1) {
return object->drawing_disc_radius * zoom_factor;
}
return object->drawing_disc_radius;
}
Vector2 calculate_gravitational_acceleration(int32_t object_index, CelestialObject **objects, int32_t objects_length) {
Vector2 a = vector2_create_zero();
for (int32_t i = 0; i < objects_length; i += 1) {
if (i == object_index) {
continue;
}
Vector2 r = vector2_substract((i < object_index) ? objects[i]->previous_position : objects[i]->position, objects[object_index]->position);
double a_scalar = G * objects[i]->mass * pow(pow(vector2_norm(r), 2), -1);
a = vector2_add(a, vector2_multiply(vector2_normalize(r), a_scalar));
}
return a;
}
void celestial_object_first_update(int32_t object_index, CelestialObject **objects, int32_t objects_length, int32_t main_object_index) {
CelestialObject *object = objects[object_index];
CelestialObject *main_object = objects[main_object_index];
......@@ -71,22 +95,6 @@ void celestial_object_update(int32_t object_index, CelestialObject **objects, in
celestial_object_update_previous_positions(object);
}
Vector2 calculate_gravitational_acceleration(int32_t object_index, CelestialObject **objects, int32_t objects_length) {
Vector2 a = vector2_create_zero();
for (int32_t i = 0; i < objects_length; i += 1) {
if (i == object_index) {
continue;
}
Vector2 r = vector2_substract((i < object_index) ? objects[i]->previous_position : objects[i]->position, objects[object_index]->position);
double a_scalar = G * objects[i]->mass * pow(pow(vector2_norm(r), 2), -1);
a = vector2_add(a, vector2_multiply(vector2_normalize(r), a_scalar));
}
return a;
}
void celestial_object_update_previous_positions(CelestialObject *object) {
object->previous_positions[0] = object->position;
int32_t length = object->previous_positions_length;
......@@ -118,14 +126,6 @@ void celestial_object_draw(CelestialObject *object, Vector2 reference_frame, dou
}
}
int32_t get_zoomed_drawing_disc_radius(CelestialObject *object, double zoom_factor) {
if (zoom_factor < 1) {
return object->drawing_disc_radius * zoom_factor;
}
return object->drawing_disc_radius;
}
void celestial_object_draw_name(CelestialObject *object, Vector2 reference_frame, double zoom_factor) {
Vector2 scaled_position = scale_position(object->position, reference_frame, zoom_factor);
......
......@@ -18,12 +18,12 @@ typedef struct CelestialObject {
CelestialObject *celestial_object_create(char *name, double mass, double semi_major_axis, double eccentricity, int32_t drawing_disc_radius, int32_t drawing_color);
void celestial_object_destroy(CelestialObject *object);
int32_t get_zoomed_drawing_disc_radius(CelestialObject *object, double zoom_factor);
Vector2 calculate_gravitational_acceleration(int32_t object_index, CelestialObject **objects, int32_t objects_length);
void celestial_object_first_update(int32_t object_index, CelestialObject **objects, int32_t objects_length, int32_t main_object_index);
void celestial_object_update(int32_t object_index, CelestialObject **objects, int32_t objects_length, double interval, double previous_interval);
Vector2 calculate_gravitational_acceleration(int32_t object_index, CelestialObject **objects, int32_t objects_length);
void celestial_object_update_previous_positions(CelestialObject *object);
void celestial_object_draw(CelestialObject *object, Vector2 reference_frame, double zoom_factor);
int32_t get_zoomed_drawing_disc_radius(CelestialObject *object, double zoom_factor);
void celestial_object_draw_name(CelestialObject *object, Vector2 reference_frame, double zoom_factor);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment