diff --git a/skeleton/.vscode/launch.json b/skeleton/.vscode/launch.json new file mode 100644 index 0000000000000000000000000000000000000000..d895599b395ef099cdcfb125b8bfd7f60f8aca28 --- /dev/null +++ b/skeleton/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + "configurations": [ + { + "name": "(gdb) Lancer", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/main", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Activer l'impression en mode Pretty pour gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Définir la version désassemblage sur Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + ] +} + \ No newline at end of file diff --git a/skeleton/main b/skeleton/main index 56174080d08bfd4a47812e0d86319dfaeac5e0c9..92bcf89d87cf4149fe72cdd2a10df078f1635cf7 100755 Binary files a/skeleton/main and b/skeleton/main differ diff --git a/skeleton/main.c b/skeleton/main.c index 6d1b517587c87bde08163f6e70c89141af3d44ac..f90a6d220c6fd75d0c5bef97ad93117f00ea0ab2 100644 --- a/skeleton/main.c +++ b/skeleton/main.c @@ -8,7 +8,8 @@ #define SCREEN_WIDTH 1000 #define SCREEN_HEIGHT 1000 -#define delta_t 86400 //en secondes +#define delta_t 4000 //en secondes + int main() @@ -27,11 +28,12 @@ int main() bool x = false; while (true){ gfx_present(ctxt); + gfx_clear(ctxt, COLOR_BLACK); // TODO : draw the current state of your system show_system(ctxt, &s); // TODO : update your system update_system(&s, delta_t, x); - gfx_clear(ctxt, COLOR_BLACK); + if (gfx_keypressed() == SDLK_ESCAPE){ break; } diff --git a/skeleton/main.o b/skeleton/main.o index 9b6d64646648c61d99e16e19d24a0bb0f52d30e7..03f5121b40279bc3063bec263cfcd1b274a910fa 100644 Binary files a/skeleton/main.o and b/skeleton/main.o differ diff --git a/skeleton/planet.o b/skeleton/planet.o index cf6929a981a1b745fcc192b6157d382c667237ea..2506093d81093b1b3b65c54b647d79d455061a32 100644 Binary files a/skeleton/planet.o and b/skeleton/planet.o differ diff --git a/skeleton/planet/planet.c b/skeleton/planet/planet.c index e390ce71e006dc33cf4e74755cffe1f3d2464301..95d8cb16e5b07f41d9d4f5b384f77b5ebb542a02 100644 --- a/skeleton/planet/planet.c +++ b/skeleton/planet/planet.c @@ -31,12 +31,12 @@ system_t create_system(){ s.star = create_planet(M_SOLEIL , vec2_create_zero(), vec2_create_zero(), 0, 0, 0); s.nb_planets = 6; s.planets = malloc(sizeof(planet_t) * s.nb_planets); - s.planets[4] = create_planet(M_NAMEK , vec2_create(-0.05, 0), vec2_create(0 , 0), 0.01, 0.068, -0.05); - s.planets[0] = create_planet(M_MERCURE , vec2_create(-0.092, 0), vec2_create(0 , 0), 0.20563069, 0.116, -0.092); - s.planets[1] = create_planet(M_VENUS , vec2_create(-0.214, 0), vec2_create(0 , 0), 0.0067733, 0.216, -0.214); - s.planets[2] = create_planet(M_TERRE, vec2_create(-0.294 , 0), vec2_create(0 , 0), 0.01671022, 0.3, -0.294); - s.planets[3] = create_planet(M_MARS , vec2_create(-0.412 , 0), vec2_create(0 , 0), 0.09341233, 0.456, -0.412); - s.planets[5] = create_planet(M_AZEROTH , vec2_create(-0.556 , 0), vec2_create(0 , 0), 0.01, 0.582, -0.556); + s.planets[0] = create_planet(M_NAMEK , vec2_create(-27000000000, 0), vec2_create(0 , 0), 0.01, 29000000000, 27000000000); + s.planets[1] = create_planet(M_MERCURE , vec2_create(-46000000000, 0), vec2_create(0 , 0), 0.20563069, 57909050000, 46000000000); + s.planets[2] = create_planet(M_VENUS , vec2_create(-107476170000, 0), vec2_create(0 , 0), 0.0067733, 108208475000, 107476170000); + s.planets[3] = create_planet(M_TERRE, vec2_create(-147098291000 , 0), vec2_create(0 , 0), 0.01671022, 149598023000, 147098291000); + s.planets[4] = create_planet(M_MARS , vec2_create(-206655215000 , 0), vec2_create(0 , 0), 0.09341233, 227939200000, 206655215000); + s.planets[5] = create_planet(M_AZEROTH , vec2_create(-260000000000 , 0), vec2_create(0 , 0), 0.01, 275000000000, 260000000000); return s; } @@ -49,7 +49,7 @@ void show_system(struct gfx_context_t *ctxt, system_t *system){ int couleur[system->nb_planets]; for(int i = 0; i < system->nb_planets ; i++){ double mass = system->planets[i].mass; - coordinates coord = vec2_to_coordinates(system->planets[i].pos, 1000, 1000); + coordinates coord = vec2_to_coordinates(system->planets[i].pos); if(mass == M_NAMEK){ posx[i] = coord.column; posy[i] = coord.row; @@ -88,16 +88,17 @@ void show_system(struct gfx_context_t *ctxt, system_t *system){ } } for(int i = 0 ; i < system->nb_planets ; i++){ + printf("planete %d : %lf\n", i, system->planets[i].pos.y); draw_full_circle(ctxt, posx[i], posy[i], rayon[i], couleur[i]); } } -// update du systeme +//update du systeme void update_system(system_t *system, double delta_t, bool x){ for(int i = 0; i < system->nb_planets ; i++){ vec2 pos_tmp = system->planets[i].pos; - if(x == false){ - system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t); + if(!x){ + system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t); x = true; } else{ @@ -112,6 +113,13 @@ bool is_equal(planet_t a, planet_t b){ return a.mass == b.mass; } +// static double calcul_gravite(planet_t a, planet_t b, vec2 AB, double l){ +// double calcul_mass = a.mass * b.mass; +// double calcul_r3 = pow(vec2_norm(AB),3); +// double calcul_force = G * (calcul_mass / calcul_r3) * l; +// return calcul_force; +// } + //force de gravité vec2 gravite(planet_t a, planet_t b){ vec2 AB = vec2_sub(a.pos, b.pos); @@ -125,27 +133,39 @@ vec2 gravite(planet_t a, planet_t b){ vec2 somme_force(system_t system, planet_t p){ vec2 s = gravite(p, system.star); for(int i = 0 ; i < system.nb_planets ; i++){ - if(is_equal(p , system.planets[i])){ + if(!is_equal(p , system.planets[i])){ vec2 g = gravite(p, system.planets[i]); s.x += g.x; s.y += g.y; } } - return s; + return s; } //acceleration vec2 accel(system_t system, planet_t p){ vec2 a = somme_force(system , p); - return vec2_create(a.x / p.mass, a.y / p.mass); + double x = a.x / p.mass; + double y = a.y / p.mass; + return vec2_create(x, y); } + + +// static double calcul_vitesse(planet_t p, double l, vec2 per){ +// double num = G * M_SOLEIL * (1 + p.e); +// double denom = p.DG * (1 - p.e); +// double racine = sqrt(num/denom); +// double res = racine * (l / vec2_norm(per)); +// return res; +// } + //vitesse initiale vec2 vitesse_i(planet_t p){ vec2 per = vec2_create(-p.pos.y , p.pos.x); vec2 vi; - vi.x = sqrt((G * M_SOLEIL * (1 + p.e)) / p.DG * (1-p.e)) * per.x / vec2_norm(per); - vi.y = sqrt((G * M_SOLEIL * (1 + p.e)) / p.DG * (1-p.e)) * per.y / vec2_norm(per); + vi.x = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.x / vec2_norm(per); + vi.y = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.y / vec2_norm(per);; return vi; } @@ -153,11 +173,15 @@ vec2 vitesse_i(planet_t p){ vec2 pos_init(system_t system, planet_t p, double delta_t){ vec2 v = vitesse_i(p); vec2 a = accel(system , p); - return vec2_create(p.pos.x + delta_t * v.x + (pow(delta_t, 2) / 2) * a.x, p.pos.y + delta_t * v.y + (pow(delta_t, 2) / 2) * a.y); + double x = p.pos.x + delta_t * v.x + (pow(delta_t, 2) / 2) * a.x; + double y = p.pos.y + delta_t * v.y + (pow(delta_t, 2) / 2) * a.y; + return vec2_create(x, y); } //position update vec2 pos_u(system_t system, planet_t p, double delta_t){ vec2 a = accel(system , p); - return vec2_create(2 * p.pos.x - p.prec_pos.x + pow(delta_t, 2) * a.x , 2 * p.pos.y - p.prec_pos.y + pow(delta_t, 2) * a.y); + double x = 2 * p.pos.x - p.prec_pos.x + pow(delta_t, 2) * a.x; + double y = 2 * p.pos.y - p.prec_pos.y + pow(delta_t, 2) * a.y; + return vec2_create(x, y); } \ No newline at end of file diff --git a/skeleton/vec2.o b/skeleton/vec2.o index 54a08fae76f3ecaa63059fbbda66a731baf84400..11472e3c4b3b15a56989fdfbdb992372a91f3011 100644 Binary files a/skeleton/vec2.o and b/skeleton/vec2.o differ diff --git a/skeleton/vec2/vec2.c b/skeleton/vec2/vec2.c index acfac2f280d314cde80097dc3a66e3e0d9f1a052..9a4bc912e945babc3fb3bc5084d8d3d44e226c77 100644 --- a/skeleton/vec2/vec2.c +++ b/skeleton/vec2/vec2.c @@ -118,15 +118,11 @@ bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps) { /// @param width The screen width. /// @param height The screen height. /// @return The coordinates (rwo, column). -coordinates vec2_to_coordinates(vec2 v, uint32_t width, uint32_t height) { +coordinates vec2_to_coordinates(vec2 v) { - - width -= 1; - height -= 1; + double coordinates_x = v.x/1000000000 + 500; - double coordinates_x = v.x*width/2 + width/2; - - double coordinates_y = v.y*height/2 + height/2; + double coordinates_y = v.y/1000000000 + 500; coordinates new_cor; new_cor.row = round(coordinates_y); new_cor.column = round(coordinates_x); diff --git a/skeleton/vec2/vec2.h b/skeleton/vec2/vec2.h index e1f7f1084866caa95e361ade560a8b48c7988f83..843a1d209a745c5861c1082cb9590cec87ee42ee 100644 --- a/skeleton/vec2/vec2.h +++ b/skeleton/vec2/vec2.h @@ -34,7 +34,7 @@ vec2 vec2_normalize(vec2 v); bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps); -coordinates vec2_to_coordinates(vec2 v, uint32_t width, uint32_t height); +coordinates vec2_to_coordinates(vec2 v); void vec2_print(vec2 v);