diff --git a/CelestialObject.c b/CelestialObject.c index 21d56a32b8105a20d13e9cec325c462db92428cf..ea0fedc53bc0429516481295cb7b421160483144 100644 --- a/CelestialObject.c +++ b/CelestialObject.c @@ -5,11 +5,11 @@ #define G 6.67e-11 #define SUN_MASS 1.989e30 -CelestialObject *celestial_object_create(double mass, Vector2 *position) { +CelestialObject *celestial_object_create(double mass, Vector2 position) { CelestialObject *object = (CelestialObject*)malloc(sizeof(CelestialObject)); object->mass = mass; - object->previous_position = NULL; + // object->previous_position = NULL; object->current_position = position; return object; diff --git a/CelestialObject.h b/CelestialObject.h index 89b260b1bdc6d9ee2d4945a057de3bab6dc56947..aaf020a7d50c85eb8f9ee1e4a7762eef6ce3b828 100644 --- a/CelestialObject.h +++ b/CelestialObject.h @@ -1,16 +1,16 @@ #ifndef CELESTIAL_OBJECT_H #define CELESTIAL_OBJECT_H -#include "Vectors/Vector2.h" +#include "Vector2.h" #include "gfx/gfx.h" typedef struct CelestialObject CelestialObject; typedef struct CelestialObject { double mass; - Vector2 *previous_position; - Vector2 *current_position; + Vector2 previous_position; + Vector2 current_position; } CelestialObject; -CelestialObject *celestial_object_create(double mass, Vector2 *position); +CelestialObject *celestial_object_create(double mass, Vector2 position); #endif diff --git a/Makefile b/Makefile index d09695742e0bf2a37cf2962d9c478115dd5bfe1a..d8a47db4a47df911674645f3cb0713e13feb3172 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,15 @@ -#The compiler +TARGET = main CC:=gcc -#The flags passed to the compiler -CFLAGS:=-g -Ofast -Wall -Wextra -fsanitize=address -fsanitize=leak -std=gnu11 -#The flags passed to the linker +# CFLAGS:=-g -Ofast -Wall -Wextra -fsanitize=address -fsanitize=leak -std=gnu11 +CFLAGS:=-fsanitize=address LDFLAGS:=-lm -lSDL2 -#Path to the lib Vec2 -VPATH:=Vectors gfx +VPATH:=gfx +%.o: %.c $(HEADERS) + $(CC) $(CFLAGS) -c $< -o $@ - -main: main.o Vector2.o gfx.o CelestialObject.o SolarSystem.o +$(TARGET): main.o Vector2.o CelestialObject.o SolarSystem.o gfx.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -CelestialObject.o: CelestialObject.h -SolarSystem.o: SolarSystem.h -Vector2.o: Vector2.h -gfx.o: gfx.h - clean: - rm -f *.o main tests + -rm -f *.o $(TARGET) diff --git a/SolarSystem.c b/SolarSystem.c index 82f269c5e5013d5d14d65cc22184e7c7519c629d..1c79cd2150f1c639c8d956e2955849ead4e6c62b 100644 --- a/SolarSystem.c +++ b/SolarSystem.c @@ -3,75 +3,64 @@ #include <stdlib.h> #include "CelestialObject.h" -#include "Vectors/Vector2.h" +#include "Vector2.h" #include "gfx/gfx.h" #define SCREEN_WIDTH 1000 #define SCREEN_HEIGHT 1000 -void __update(SolarSystem *solar_system) { +SolarSystem *solar_system_create(double interval) { + SolarSystem *solar_system = (SolarSystem *)malloc(sizeof(SolarSystem)); + + solar_system->objects_length = 2; + solar_system->objects = (CelestialObject **)malloc(sizeof(SolarSystem *) * solar_system->objects_length); + + solar_system->objects[0] = celestial_object_create(1.989 * 1E30, vector2_create(0, 0)); + + double perihelion_1 = 149.6 * 1E9 * (1 - 0.01671123); + solar_system->objects[1] = celestial_object_create(5.972 * 1E24, vector2_create(-perihelion_1, 0)); + + // const double MARS_MASS = 6.39 * 1E23; + // double e_2 = 0.0934; + // double semi_major_2 = 227.9 * 1E9; + // double perihelion_2 = semi_major_2 * (1 - e_2); + // Vector2 *mars_position = vector2_create(-perihelion_2, 0); + // solar_system->celestial_objects[2] = celestial_object_create(MARS_MASS, mars_position); + + // const double VENUS_MASS = 4.867 * 1E24; + // double e_3 = 0.00678; + // double semi_major_3 = 108.2095 * 1E9; + // double perihelion_3 = semi_major_3 * (1 - e_3); + // Vector2 *venus_position = vector2_create(-perihelion_3, 0); + // solar_system->celestial_objects[3] = celestial_object_create(VENUS_MASS, venus_position); + + return solar_system; } -void __draw(SolarSystem *solar_system, struct gfx_context_t *ctxt) { - for (int32_t i = 0; i < solar_system->celestial_objects_length; i += 1) { - CelestialObject *object = solar_system->celestial_objects[i]; +void solar_system_update(SolarSystem *solar_system) { +} + +void solar_system_draw(SolarSystem *solar_system, struct gfx_context_t *context) { + for (uint32_t i = 0; i < solar_system->objects_length; i += 1) { + CelestialObject *object = solar_system->objects[i]; - Vector2 *tmp = object->current_position->multiply(object->current_position, 1.0 / (227.9 * 1E9 * 1.1)); - Vector2 *tmp2 = object->current_position->fit_canvas(tmp, SCREEN_WIDTH, SCREEN_HEIGHT); + Vector2 scaled_position = vector2_multiply(object->current_position, 1.0 / (227.9 * 1E9 * 1.1)); + scaled_position = vector2_fit_canvas(scaled_position, SCREEN_WIDTH, SCREEN_HEIGHT); if (i == 0) { - draw_full_circle(ctxt, tmp2->x, tmp2->y, 70, COLOR_YELLOW); + draw_full_circle(context, scaled_position.x, scaled_position.y, 70, COLOR_YELLOW); } if (i == 1) { - draw_full_circle(ctxt, tmp2->x, tmp2->y, 15, COLOR_BLUE); + draw_full_circle(context, scaled_position.x, scaled_position.y, 15, COLOR_BLUE); } if (i == 2) { - draw_full_circle(ctxt, tmp2->x, tmp2->y, 8, COLOR_RED); + draw_full_circle(context, scaled_position.x, scaled_position.y, 8, COLOR_RED); } if (i == 3) { - draw_full_circle(ctxt, tmp2->x, tmp2->y, 15, COLOR_GREEN); + draw_full_circle(context, scaled_position.x, scaled_position.y, 15, COLOR_GREEN); } - - free(tmp); - free(tmp2); } } - -SolarSystem *solar_system_create(double interval) { - SolarSystem *solar_system = (SolarSystem *)malloc(sizeof(SolarSystem)); - solar_system->update = __update; - solar_system->draw = __draw; - - solar_system->celestial_objects_length = 4; - solar_system->celestial_objects = (SolarSystem **)malloc(sizeof(SolarSystem *) * solar_system->celestial_objects_length); - - const double SUN_MASS = 1.989 * 1E30; - Vector2 *sun_position = vector2_create(0, 0); - solar_system->celestial_objects[0] = celestial_object_create(SUN_MASS, sun_position); - - const double EARTH_MASS = 5.972 * 1E24; - double e_1 = 0.01671123; - double semi_major_1 = 149.6 * 1E9; - double perihelion_1 = semi_major_1 * (1 - e_1); - Vector2 *earth_position = vector2_create(-perihelion_1, 0); - solar_system->celestial_objects[1] = celestial_object_create(EARTH_MASS, earth_position); - - const double MARS_MASS = 6.39 * 1E23; - double e_2 = 0.0934; - double semi_major_2 = 227.9 * 1E9; - double perihelion_2 = semi_major_2 * (1 - e_2); - Vector2 *mars_position = vector2_create(-perihelion_2, 0); - solar_system->celestial_objects[2] = celestial_object_create(MARS_MASS, mars_position); - - const double VENUS_MASS = 4.867 * 1E24; - double e_3 = 0.00678; - double semi_major_3 = 108.2095 * 1E9; - double perihelion_3 = semi_major_3 * (1 - e_3); - Vector2 *venus_position = vector2_create(-perihelion_3, 0); - solar_system->celestial_objects[3] = celestial_object_create(VENUS_MASS, venus_position); - - return solar_system; -} diff --git a/SolarSystem.h b/SolarSystem.h index 44d2c5878961e4d5eeef998be91ad9b6ef71f1a7..139a1253eab62d9384826d03221586a926a16978 100644 --- a/SolarSystem.h +++ b/SolarSystem.h @@ -1,20 +1,20 @@ #ifndef SOLAR_SYSTEM_H #define SOLAR_SYSTEM_H +#include <stdint.h> + #include "CelestialObject.h" #include "gfx/gfx.h" -typedef struct SolarSystem SolarSystem; -struct SolarSystem { - // CelestialObject *star; - uint32_t celestial_objects_length; - CelestialObject **celestial_objects; - - void (*update)(SolarSystem *solar_system); - void (*draw)(SolarSystem *solar_system, struct gfx_context_t *ctxt); -}; +typedef struct { + uint32_t objects_length; + CelestialObject **objects; +} SolarSystem; SolarSystem *solar_system_create(double interval); +void solar_system_update(SolarSystem *solar_system); +void solar_system_draw(SolarSystem *solar_system, struct gfx_context_t *context); + // void show_system(struct gfx_context_t *ctxt, system_t *system); // void update_system(system_t *system, double interval); // void free_system(system_t *system); diff --git a/Vector2.c b/Vector2.c new file mode 100644 index 0000000000000000000000000000000000000000..8e91e99d1fdc5de0117b3110485ae022f356487f --- /dev/null +++ b/Vector2.c @@ -0,0 +1,57 @@ +#include "Vector2.h" + +#include <math.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> + +Vector2 vector2_create(double x, double y) { + return (Vector2){.x = x, .y = y}; +} + +Vector2 vector2_create_zero() { + return vector2_create(0, 0); +} + +Vector2 vector2_add(Vector2 a, Vector2 b) { + return vector2_create(a.x + b.x, a.y + b.y); +} + +Vector2 vector2_substract(Vector2 a, Vector2 b) { + return vector2_create(a.x - b.x, a.y - b.y); +} + +Vector2 vector2_multiply(Vector2 v, double scalar) { + return vector2_create(v.x * scalar, v.y * scalar); +} + +double vector2_dot_product(Vector2 a, Vector2 b) { + return a.x * b.x + a.y * b.y; +} + +double vector2_norm_sqr(Vector2 v) { + return vector2_dot_product(v, v); +} + +double vector2_norm(Vector2 v) { + return sqrt(vector2_norm_sqr(v)); +} + +Vector2 vector2_normalize(Vector2 v) { + double norm = vector2_norm(v); + return vector2_create(v.x / norm, v.y / norm); +} + +bool vector2_is_similiar(Vector2 a, Vector2 b, double epsilon) { + return vector2_norm(vector2_substract(a, b)) < epsilon; +} + +Vector2 vector2_fit_canvas(Vector2 v, uint32_t width, uint32_t height) { + double x = round((width - 1) / 2.0 + v.x * (width - 1) / 2.0); + double y = round((height - 1) / 2.0 + v.y * (height - 1) / 2.0); + return vector2_create(x, y); +} + +void vector2_print(Vector2 v) { + printf("(%lf, %lf)\n", v.x, v.y); +} diff --git a/Vector2.h b/Vector2.h new file mode 100644 index 0000000000000000000000000000000000000000..1045c99ea563cd3b1d9adf3aba97158d673e2176 --- /dev/null +++ b/Vector2.h @@ -0,0 +1,26 @@ +#ifndef VECTOR2_H +#define VECTOR2_H + +#include <stdbool.h> +#include <stdint.h> + +typedef struct Vector2 Vector2; +struct Vector2 { + double x; + double y; +}; + +Vector2 vector2_create(double x, double y); +Vector2 vector2_create_zero(); +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); + +#endif diff --git a/Vectors/Vector2.c b/Vectors/Vector2.c deleted file mode 100644 index 981c9d518bcd5de980e2b89810078ba9f23dc40f..0000000000000000000000000000000000000000 --- a/Vectors/Vector2.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "Vector2.h" - -#include <math.h> -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> - -Vector2 *__add(Vector2 *a, Vector2 *b) { - return vector2_create(a->x + b->x, a->y + b->y); -} - -Vector2 *__substract(Vector2 *a, Vector2 *b) { - return vector2_create(a->x - b->x, a->y - b->y); -} - -Vector2 *__multiply(Vector2 *v, double scalar) { - return vector2_create(v->x * scalar, v->y * scalar); -} - -double __dot_product(Vector2 *a, Vector2 *b) { - return a->x * b->x + a->y * b->y; -} - -double __norm_sqr(Vector2 *v) { - return v->dot_product(v, v); -} - -double __norm(Vector2 *v) { - return sqrt(v->norm_sqr(v)); -} - -Vector2 *__normalize(Vector2 *v) { - double norm = v->norm(v); - return vector2_create(v->x / norm, v->y / norm); -} - -bool __is_similiar(Vector2 *a, Vector2 *b, double epsilon) { - Vector2 *c = a->substract(a, b); - double norm = c->norm(c); - free(c); - return norm < epsilon; -} - -Vector2 *__fit_canvas(Vector2 *v, uint32_t width, uint32_t height) { - double x = round((width - 1) / 2.0 + v->x * (width - 1) / 2.0); - double y = round((height - 1) / 2.0 + v->y * (height - 1) / 2.0); - return vector2_create(x, y); -} - -void __print(Vector2 *v) { - printf("(%lf, %lf)\n", v->x, v->y); -} - -Vector2 *vector2_create(double x, double y) { - Vector2 *v = (Vector2 *)malloc(sizeof(Vector2)); - v->add = __add; - v->substract = __substract; - v->multiply = __multiply; - v->dot_product = __dot_product; - v->norm = __norm; - v->norm_sqr = __norm_sqr; - v->normalize = __normalize; - v->is_similiar = __is_similiar; - v->fit_canvas = __fit_canvas; - v->print = __print; - - v->x = x; - v->y = y; - - return v; -} - -Vector2 *vector2_create_zero() { - return vector2_create(0, 0); -} diff --git a/Vectors/Vector2.h b/Vectors/Vector2.h deleted file mode 100644 index c8aaf1b643fbd633b68f28f50511c62cf634249f..0000000000000000000000000000000000000000 --- a/Vectors/Vector2.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef VECTOR2_H -#define VECTOR2_H - -#include <stdbool.h> -#include <stdint.h> - -typedef struct Vector2 Vector2; -struct Vector2 { - double x; - double y; - - Vector2 *(*add)(Vector2 *a, Vector2 *b); - Vector2 *(*substract)(Vector2 *a, Vector2 *b); - Vector2 *(*multiply)(Vector2 *v, double scalar); - double (*dot_product)(Vector2 *a, Vector2 *b); - double (*norm_sqr)(Vector2 *v); - double (*norm)(Vector2 *v); - Vector2 *(*normalize)(Vector2 *v); - bool (*is_similiar)(Vector2 *a, Vector2 *b, double epsilon); - Vector2 *(*fit_canvas)(Vector2 *v, uint32_t width, uint32_t height); - void (*print)(Vector2 *v); -}; - -Vector2 *vector2_create(double x, double y); -Vector2 *vector2_create_zero(); - -typedef struct _coordinates { - uint32_t row, column; -} coordinates; - -#endif diff --git a/Vectors/vec_tests.c b/Vectors/vec_tests.c deleted file mode 100644 index 30ef80ca3d13c7fcab93dac3b3a5d298dcc7a49a..0000000000000000000000000000000000000000 --- a/Vectors/vec_tests.c +++ /dev/null @@ -1,311 +0,0 @@ -#include <math.h> -#include <stdbool.h> -#include <stdio.h> -#include <stdlib.h> - -#include "Vector2.h" - -typedef struct _test_result { - bool passed; - const char *name; -} test_result; - -typedef test_result (*unit_test_t)(void); - -void print_in_color(char *color, char *text) { - printf("\033%s", color); - printf("%s", text); - printf("\033[0m"); -} - -void print_in_red(char *text) { - print_in_color("[0;31m", text); -} - -void print_in_green(char *text) { - print_in_color("[0;32m", text); -} - -bool dbl_eq(double a, double b) { - return fabs(a - b) < 1e-6; -} - -/* -* -* Write your tests here -* -*/ -/* TODO -vec2 vec2_create(double x_, double y_); -- Ok -vec2 vec2_create_zero(); -- Ok -vec2 vec2_add(vec2 lhs, vec2 rhs); -- Ok -vec2 vec2_sub(vec2 lhs, vec2 rhs); -- Ok -vec2 vec2_mul(double scalar, vec2 lhs); -- Ok -double vec2_dot(vec2 lhs, vec2 rhs); -- Ok -double vec2_norm_sqr(vec2 v); -- Ok -double vec2_norm(vec2 v); -- Ok -vec2 vec2_normalize(vec2 v); -- Ok -bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps); -coordinates vec2_to_coordinates(vec2 v, uint32_t width, uint32_t height); -*/ -const double u_x[] = {1.25, 3.53, 2.64, 8.8}; -const double u_y[] = {3.42, 7.22, 5.32, 2.44}; -const double v_x[] = {4.32, 6.21, 7.42, 9.32}; -const double v_y[] = {5.22, 3.56, 8.65, 6.44}; -const uint32_t nb_tests = sizeof(u_x) / sizeof(double); - -test_result t_vec2_create_0() { - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *v = vector2_create(u_x[i], u_y[i]); - if (u_x[i] != v->x || u_y[i] != v->y) { - passed = false; - break; - } - free(v); - } - - return (test_result){.passed = passed, .name = "Test vec2_create 0"}; -} - -test_result t_vec2_create_zero_0() { - Vector2 *v = vector2_create_zero(); - bool passed = v->x == 0.0 && v->y == 0.0; - free(v); - return (test_result){.passed = passed, .name = "Test vec2_create_zero 0"}; -} - -test_result t_vec2_add_0() { - double r_x[] = {5.57, 9.74, 10.06, 18.12}; - double r_y[] = {8.64, 10.78, 13.97, 8.88}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *v = vector2_create(v_x[i], v_y[i]); - Vector2 *r = u->add(u, v); - - if (!(dbl_eq(r->x, r_x[i]) && dbl_eq(r->y, r_y[i]))) { - passed = false; - break; - } - - free(u); - free(v); - free(r); - } - - return (test_result){.passed = passed, .name = "Test vec2_add 0"}; -} - -test_result t_vec2_sub_0() { - double r_x[] = {-3.07, -2.68, -4.78, -0.52}; - double r_y[] = {-1.80, 3.66, -3.33, -4.00}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *v = vector2_create(v_x[i], v_y[i]); - Vector2 *r = u->substract(u, v); - - if (!(dbl_eq(r->x, r_x[i]) && dbl_eq(r->y, r_y[i]))) { - passed = false; - break; - } - - free(u); - free(v); - free(r); - } - - return (test_result){.passed = passed, .name = "Test vec2_sub 0"}; -} - -test_result t_vec2_mul_0() { - double r_x[] = {5.40, 21.9213, 19.5888, 82.016}; - double r_y[] = {14.7744, 44.8362, 39.4744, 22.740800}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - double alpha = v_x[i]; - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *r = u->multiply(u, alpha); - - if (!(dbl_eq(r->x, r_x[i]) && dbl_eq(r->y, r_y[i]))) { - passed = false; - break; - } - - free(u); - free(r); - } - - return (test_result){.passed = passed, .name = "Test vec2_mul 0"}; -} - -test_result t_vec2_dot_0() { - double r[] = {23.2524, 47.6245, 65.6068, 97.7296}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *v = vector2_create(v_x[i], v_y[i]); - double res = u->dot_product(u, v); - - if (!dbl_eq(res, r[i])) { - passed = false; - break; - } - - free(u); - free(v); - } - - return (test_result){.passed = passed, .name = "Test vec2_dot 0"}; -} - -test_result t_vec2_norm_sqr_0() { - double r[] = {13.2589, 64.5893, 35.272, 83.3936}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - double res = u->norm_sqr(u); - - if (!dbl_eq(res, r[i])) { - passed = false; - break; - } - - free(u); - } - - return (test_result){.passed = passed, .name = "Test vec2_norm_sqr 0"}; -} - -test_result t_vec2_norm_0() { - double r[] = {3.641277, 8.036747, 5.939023, 9.132010}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - double res = u->norm(u); - - if (!dbl_eq(res, r[i])) { - passed = false; - break; - } - - free(u); - } - - return (test_result){.passed = passed, .name = "Test vec2_norm 0"}; -} - -test_result t_vec2_normalize_0() { - double r_x[] = {0.343286, 0.439232, 0.444518, 0.963643}; - double r_y[] = {0.939231, 0.898373, 0.895770, 0.267192}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *r = u->normalize(u); - - if (!(dbl_eq(r->x, r_x[i]) && dbl_eq(r->y, r_y[i]))) { - passed = false; - break; - } - - free(u); - free(r); - } - - return (test_result){.passed = passed, .name = "Test vec2_normalize 0"}; -} - -test_result t_vec2_is_approx_equal_0() { - bool r[] = {true, true, false, false}; - - double t_x[] = {u_x[0], u_x[1] + 1e-4, u_x[2] + 15.0, u_x[3] + 1e-2}; - double t_y[] = {u_y[0], u_y[1] - 1e-4, u_y[2] + 15.0, u_y[3] + 1e-2}; - - bool passed = true; - for (uint32_t i = 0; i < nb_tests; i++) { - Vector2 *u = vector2_create(u_x[i], u_y[i]); - Vector2 *t = vector2_create(t_x[i], t_y[i]); - - if (u->is_similiar(u, t, 1e-3) != r[i]) { - passed = false; - break; - } - - free(u); - free(t); - } - - return (test_result){.passed = passed, .name = "Test vec2_is_approx_equal 0"}; -} - -// test_result t_vec2_to_coordinates_0() { -// uint32_t height = 300; -// uint32_t width = 100; -// double t_x[] = {0.25, 0.5, 0.75, 1}; -// double t_y[] = {0, 1.0 / 3.0, 2.0 / 3.0, 1}; -// uint32_t r_col[] = {62, 74, 87, 99}; -// uint32_t r_row[] = {150, 199, 249, 299}; - -// bool passed = true; -// for (uint32_t i = 0; i < nb_tests; i++) { -// vec2 t = vec2_create(t_x[i], t_y[i]); -// coordinates r = vec2_to_coordinates(t, width, height); - -// if (r.row != r_row[i] || r.column != r_col[i]) { -// passed = false; -// break; -// } -// } - -// return (test_result){.passed = passed, .name = "Test vec2_to_coordinates 0"}; -// } - -//Add or remove your test function name here -const unit_test_t tests[] = { - t_vec2_create_0, - t_vec2_create_zero_0, - t_vec2_add_0, - t_vec2_sub_0, - t_vec2_mul_0, - t_vec2_dot_0, - t_vec2_norm_sqr_0, - t_vec2_norm_0, - t_vec2_normalize_0, - t_vec2_is_approx_equal_0, - // t_vec2_to_coordinates_0, -}; - -int main() { - uint32_t nb_tests = sizeof(tests) / sizeof(unit_test_t); - char message[256]; - bool all_passed = true; - - for (uint32_t i = 0; i < nb_tests; i++) { - printf("Running test n°%d: ...\n", i); - test_result r = tests[i](); - - if (r.passed) { - sprintf(message, "\t- %s : OK", r.name); - print_in_green(message); - } else { - all_passed = false; - sprintf(message, "\t- %s : FAILED", r.name); - print_in_red(message); - } - - printf("\n"); - } - - if (all_passed) - print_in_green("\nTests suite result : OK\n"); - else - print_in_red("\nTests suite result : FAILED\n"); -} diff --git a/main.c b/main.c index a7cd861cd9cad739011c90dcca1ce1807c5342c2..30429fa7dbb041ffcf01aa71b4ed67ca24129f20 100644 --- a/main.c +++ b/main.c @@ -3,25 +3,20 @@ #include <stdlib.h> #include <time.h> -#include "CelestialObject.h" #include "SolarSystem.h" -#include "Vectors/Vector2.h" -#include "gfx/gfx.h" +#include "Vector2.h" +// #include "gfx/gfx.h" #define SCREEN_WIDTH 1000 #define SCREEN_HEIGHT 1000 -const double SUN_MASS = 1.989 * 1E30; -const double EARTH_MASS = 5.972 * 1E24; - int main() { // srand(time(NULL)); srand(0); - printf("%lf\n", SUN_MASS); - struct gfx_context_t *ctxt = gfx_create("Solar System", SCREEN_WIDTH, SCREEN_HEIGHT); + struct gfx_context_t *context = gfx_create("Solar System", SCREEN_WIDTH, SCREEN_HEIGHT); - if (!ctxt) { + if (!context) { fprintf(stderr, "Graphics initialization failed!\n"); return EXIT_FAILURE; } @@ -29,16 +24,16 @@ int main() { SolarSystem *solar_system = solar_system_create(0); while (true) { - gfx_present(ctxt); - gfx_clear(ctxt, COLOR_BLACK); + gfx_present(context); + gfx_clear(context, COLOR_BLACK); - solar_system->draw(solar_system, ctxt); + solar_system_draw(solar_system, context); if (gfx_keypressed() == SDLK_ESCAPE) { break; } } - gfx_destroy(ctxt); + gfx_destroy(context); return EXIT_SUCCESS; }