diff --git a/skeleton/main b/skeleton/main index 92bcf89d87cf4149fe72cdd2a10df078f1635cf7..180e8f1bb91e805eee1203bef44e7b8a9d0fc939 100755 Binary files a/skeleton/main and b/skeleton/main differ diff --git a/skeleton/main.c b/skeleton/main.c index f90a6d220c6fd75d0c5bef97ad93117f00ea0ab2..746b1f4cdf320589e42fe14afbfba27627b6b86d 100644 --- a/skeleton/main.c +++ b/skeleton/main.c @@ -8,7 +8,7 @@ #define SCREEN_WIDTH 1000 #define SCREEN_HEIGHT 1000 -#define delta_t 4000 //en secondes +#define delta_t 8000 //en secondes diff --git a/skeleton/main.o b/skeleton/main.o index 03f5121b40279bc3063bec263cfcd1b274a910fa..e4dfa8eabd5cea7579cbc0966d7ff9d0893ffc58 100644 Binary files a/skeleton/main.o and b/skeleton/main.o differ diff --git a/skeleton/planet.o b/skeleton/planet.o index 2506093d81093b1b3b65c54b647d79d455061a32..5aaa47eec525e2ba0b0f0dc1505ebc1658150e18 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 95d8cb16e5b07f41d9d4f5b384f77b5ebb542a02..e7c7bb653f62cf40f79eebc9c6b6b1d3c202e171 100644 --- a/skeleton/planet/planet.c +++ b/skeleton/planet/planet.c @@ -6,11 +6,11 @@ //Masse (kg) #define G 6.67e-11 #define M_SOLEIL 1.989e30 -#define M_NAMEK 1.40e25 #define M_MERCURE 3.285e23 #define M_VENUS 4.867e24 #define M_TERRE 5.972e24 #define M_MARS 6.39e23 +#define M_NAMEK 1.40e25 #define M_AZEROTH 7.20e25 // e = excentricité ; DG = demi-grand axe ; peri = périhelie @@ -25,24 +25,27 @@ planet_t create_planet(double mass, vec2 pos, vec2 prec_pos, double e, double DG return p; } -//distances en échelle 1/1 000 000 000(m) +//distances en m system_t create_system(){ system_t s; 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[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); + s.planets[0] = create_planet(M_MERCURE , vec2_create(-46000000000, 0), vec2_create(0 , 0), 0.20563069, 57909050000, 46000000000); + s.planets[1] = create_planet(M_VENUS , vec2_create(-107476170000, 0), vec2_create(0 , 0), 0.0067733, 108208475000, 107476170000); + s.planets[2] = create_planet(M_TERRE, vec2_create(-147098291000 , 0), vec2_create(0 , 0), 0.01671022, 149598023000, 147098291000); + s.planets[3] = create_planet(M_MARS , vec2_create(-206655215000 , 0), vec2_create(0 , 0), 0.09341233, 227939200000, 206655215000); + s.planets[4] = create_planet(M_NAMEK , vec2_create(-236000000000, 0), vec2_create(0 , 0), 0.01, 243000000000, 236000000000); + s.planets[5] = create_planet(M_AZEROTH , vec2_create(-320000000000 , 0), vec2_create(0 , 0), 0.01, 330000000000, 320000000000); return s; } -//affichage des planetes rayon 1/ 1 000 000 (m) +//affichage des planetes, rayon a l'échelle 1/ 1 000 000 m void show_system(struct gfx_context_t *ctxt, system_t *system){ - draw_full_circle(ctxt, 500, 500, 5, COLOR_YELLOW); + draw_full_circle(ctxt, 500, 500, 7, COLOR_YELLOW); + draw_full_circle(ctxt, 500, 500, 5, COLOR_ORANGE); + draw_full_circle(ctxt, 500, 500, 3, COLOR_RED); + draw_full_circle(ctxt, 500, 500, 1, COLOR_BLACK); int posx[system->nb_planets]; int posy[system->nb_planets]; int rayon[system->nb_planets]; @@ -88,7 +91,6 @@ 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]); } } @@ -99,7 +101,9 @@ void update_system(system_t *system, double delta_t, bool x){ vec2 pos_tmp = system->planets[i].pos; if(!x){ system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t); + if(i == system->nb_planets){ x = true; + } } else{ system->planets[i].pos = pos_u(*system, system->planets[i] , delta_t); @@ -108,18 +112,11 @@ void update_system(system_t *system, double delta_t, bool x){ } } -//fonction n'est pas egal à +//booleene pour qu'une planete ne boucle pas sur elle même 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); @@ -150,23 +147,12 @@ vec2 accel(system_t system, planet_t p){ 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);; - return vi; + double x = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.x / vec2_norm(per); + double y = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.y / vec2_norm(per);; + return vec2_create(x, y); } //premier changement de position