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

tkt

parent 26fc71dd
Branches
No related tags found
No related merge requests found
{
"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
No preview for this file type
......@@ -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;
}
......
No preview for this file type
No preview for this file type
......@@ -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,6 +88,7 @@ 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]);
}
}
......@@ -96,7 +97,7 @@ void show_system(struct gfx_context_t *ctxt, system_t *system){
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){
if(!x){
system->planets[i].pos = pos_init(*system, system->planets[i] , delta_t);
x = true;
}
......@@ -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,7 +133,7 @@ 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;
......@@ -137,15 +145,27 @@ vec2 somme_force(system_t system, planet_t p){
//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
No preview for this file type
......@@ -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) {
double coordinates_x = v.x/1000000000 + 500;
width -= 1;
height -= 1;
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);
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment