Skip to content
Snippets Groups Projects
Commit 630ccc8d authored by navid.elmi's avatar navid.elmi
Browse files

tkt

parent 5085166c
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#define SCREEN_WIDTH 1000 #define SCREEN_WIDTH 1000
#define SCREEN_HEIGHT 1000 #define SCREEN_HEIGHT 1000
#define delta_t 4000 //en secondes #define delta_t 8000 //en secondes
......
No preview for this file type
No preview for this file type
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
//Masse (kg) //Masse (kg)
#define G 6.67e-11 #define G 6.67e-11
#define M_SOLEIL 1.989e30 #define M_SOLEIL 1.989e30
#define M_NAMEK 1.40e25
#define M_MERCURE 3.285e23 #define M_MERCURE 3.285e23
#define M_VENUS 4.867e24 #define M_VENUS 4.867e24
#define M_TERRE 5.972e24 #define M_TERRE 5.972e24
#define M_MARS 6.39e23 #define M_MARS 6.39e23
#define M_NAMEK 1.40e25
#define M_AZEROTH 7.20e25 #define M_AZEROTH 7.20e25
// e = excentricité ; DG = demi-grand axe ; peri = périhelie // 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 ...@@ -25,24 +25,27 @@ planet_t create_planet(double mass, vec2 pos, vec2 prec_pos, double e, double DG
return p; return p;
} }
//distances en échelle 1/1 000 000 000(m) //distances en m
system_t create_system(){ system_t create_system(){
system_t s; system_t s;
s.star = create_planet(M_SOLEIL , vec2_create_zero(), vec2_create_zero(), 0, 0, 0); s.star = create_planet(M_SOLEIL , vec2_create_zero(), vec2_create_zero(), 0, 0, 0);
s.nb_planets = 6; s.nb_planets = 6;
s.planets = malloc(sizeof(planet_t) * s.nb_planets); 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[0] = create_planet(M_MERCURE , vec2_create(-46000000000, 0), vec2_create(0 , 0), 0.20563069, 57909050000, 46000000000);
s.planets[1] = 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_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_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_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(-260000000000 , 0), vec2_create(0 , 0), 0.01, 275000000000, 260000000000); s.planets[5] = create_planet(M_AZEROTH , vec2_create(-320000000000 , 0), vec2_create(0 , 0), 0.01, 330000000000, 320000000000);
return s; 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){ 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 posx[system->nb_planets];
int posy[system->nb_planets]; int posy[system->nb_planets];
int rayon[system->nb_planets]; int rayon[system->nb_planets];
...@@ -88,7 +91,6 @@ void show_system(struct gfx_context_t *ctxt, system_t *system){ ...@@ -88,7 +91,6 @@ void show_system(struct gfx_context_t *ctxt, system_t *system){
} }
} }
for(int i = 0 ; i < system->nb_planets ; i++){ 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]); draw_full_circle(ctxt, posx[i], posy[i], rayon[i], couleur[i]);
} }
} }
...@@ -99,8 +101,10 @@ void update_system(system_t *system, double delta_t, bool x){ ...@@ -99,8 +101,10 @@ void update_system(system_t *system, double delta_t, bool x){
vec2 pos_tmp = system->planets[i].pos; vec2 pos_tmp = system->planets[i].pos;
if(!x){ if(!x){
system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t); system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t);
if(i == system->nb_planets){
x = true; x = true;
} }
}
else{ else{
system->planets[i].pos = pos_u(*system, system->planets[i] , delta_t); 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){ ...@@ -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){ bool is_equal(planet_t a, planet_t b){
return a.mass == b.mass; 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é //force de gravité
vec2 gravite(planet_t a, planet_t b){ vec2 gravite(planet_t a, planet_t b){
vec2 AB = vec2_sub(a.pos, b.pos); vec2 AB = vec2_sub(a.pos, b.pos);
...@@ -150,23 +147,12 @@ vec2 accel(system_t system, planet_t p){ ...@@ -150,23 +147,12 @@ vec2 accel(system_t system, planet_t p){
return vec2_create(x, y); 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 //vitesse initiale
vec2 vitesse_i(planet_t p){ vec2 vitesse_i(planet_t p){
vec2 per = vec2_create(-p.pos.y , p.pos.x); vec2 per = vec2_create(-p.pos.y , p.pos.x);
vec2 vi; double x = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.x / vec2_norm(per);
vi.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);;
vi.y = sqrt((G * M_SOLEIL * (1 + p.e)) / (p.DG * (1-p.e))) * per.y / vec2_norm(per);; return vec2_create(x, y);
return vi;
} }
//premier changement de position //premier changement de position
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment