Skip to content
Snippets Groups Projects
Commit f6d46722 authored by arnaud.devevey's avatar arnaud.devevey
Browse files

20h30

parent b3d4f757
No related branches found
No related tags found
No related merge requests found
Pipeline #6084 failed
......@@ -40,7 +40,8 @@ int main(int argc, char **argv) {
printf("\n\n");
tests();
Box box_initial = new_box(0.0, 0.0, 10.0, 10.0);
double zone = 1e10;
Box box_initial = new_box(-zone, zone, zone, -zone);
// Galaxy* galaxy = create_and_init_galaxy(nb_stars, box_initial, DELTA_T);
......@@ -49,7 +50,6 @@ int main(int argc, char **argv) {
/*
gestion_de_la_ligne_de_commande();
allocation_mémoire_et_initialisation_de_la_galaxie();
itérations_temporelles {
liberation_des_etoiles_qui_sortent_du_domaine();
......@@ -81,28 +81,67 @@ int main(int argc, char **argv) {
Galaxy* create_and_init_galaxy(int nb_bodies, Box box, double delta_t) {
Star* list_stars = malloc(sizeof(Star) * nb_bodies);
Vector* v_null = new_vec(0, 0);
Star* temp;
for (int i = 0; i < nb_bodies; i++) {
if (i == 0) {
// on crée une étoile en (0;0) qui a comme masse 10^6 * masse solaire
// Star* sun = new_star_vel(new_vec(0, 0), speed, acc, 1e6 * MASSE_SOLAIRE, DELTA_T);
// list_stars[0] = sun;
temp = new_star_vel(*v_null, *v_null, *v_null, 1e6 * MASSE_SOLAIRE, 0.0);
} else {
double m_i = random_mass();
Vector r_i = random_position();
// si pos est dans box
Vector v_i = random_speed(r_i, m_i);
temp = new_star_vel(r_i, v_i, *v_null, m_i, 0.0);
}
list_stars[i] = *temp;
for (int i = 1; i <= nb_bodies; i++) {
// Star* temp = new_star_vel();
// on regarde comment cette étoile se fait attirer par le "soleil"
// update_acc(list_stars[i], list_stars[0]);
}
Galaxy* galaxy = malloc(sizeof(Galaxy));
galaxy -> nb_bodies = nb_bodies;
galaxy -> stars = list_stars;
galaxy -> box = box;
return galaxy;
}
void reset_acc_galaxy(Galaxy* galaxy) {
printf("bla");
Vector* v_null = new_vec(0, 0);
for (int i = 0; i < galaxy -> nb_bodies; i++) {
galaxy -> stars[i].acc = *v_null;
/*if (galaxy -> stars[i] != NULL) {
}*/
}
free(v_null);
}
void update_pos_galaxy(Galaxy* galaxy, double delta_t) {
printf("bla");
for(int i = 0; i < galaxy -> nb_bodies; i++) {
update_pos_star(&(galaxy -> stars[i]), delta_t);
}
}
void free_galaxy(Galaxy* galaxy) {
/*
for (int i = 0; i < galaxy -> nb_bodies; i++) {
free(galaxy -> stars[i]);
}
*/
}
......
......@@ -59,11 +59,18 @@ void reset_acc(Star* star) {
void update_acc(Star* target, const Star* const s2) {
// target se fait attirer par s2
Vector* rj_ri = sub_vec(&(s2 -> pos), &(target -> pos));
int G_mi_mj = FORCE_GRAVITATION * target -> mass * s2 -> mass;
Vector* temp = mul_vec(rj_ri, G_mi_mj);
target -> acc = *mul_vec(temp, (1 / pow(norm(rj_ri), 3)));
free(rj_ri);
free(temp);
}
void update_pos(Star* star, double delta_t) {
void update_pos_star(Star* star, double delta_t) {
// new_position = (2 * pos) - previous_pos + (acc * delta_t * delta_t)
star -> pos = *(mul_vec(&(star -> pos), 2));
star -> pos = *(sub_vec(&(star -> pos), &(star -> previous_pos)));
......@@ -100,13 +107,13 @@ Vector random_position() {
}
Vector random_speed(Star* star) {
Vector random_speed(Vector r_i, double m_i) {
// math.sqrt(FORCE_GRAVITATION * (star -> mass + )) * chaque composante du vecteur v(-sin(phi) ; cos(phi))
// où phi = atan2(star -> position.y / star -> position.x) // tan⁻¹
Vector* p_norm = new_vec(star -> pos.x, star -> pos.y);
double temp = sqrt(FORCE_GRAVITATION * (star -> mass + (1e6 * MASSE_SOLAIRE)) / norm(p_norm));
double phi = atan2(star -> pos.y, star -> pos.x);
Vector* p_norm = new_vec(r_i.x, r_i.y);
double temp = sqrt(FORCE_GRAVITATION * (m_i + (1e6 * MASSE_SOLAIRE)) / norm(p_norm));
double phi = atan2(r_i.y, r_i.x);
Vector speed;
speed.x = temp * (-sin(phi));
......@@ -116,7 +123,7 @@ Vector random_speed(Star* star) {
}
// il faut deja faire une liste de stars qui se trouvent dans une box
Star* super_star(Star* list_stars, int size_list) {
Star* super_star = malloc(sizeof(Star));
......@@ -131,7 +138,6 @@ Star* super_star(Star* list_stars, int size_list) {
// masse
super_star -> mass += list_stars[i].mass;
}
// ne donne pas la même chose si on fait /= 2 pour chaque boucle for
......@@ -145,6 +151,34 @@ Star* super_star(Star* list_stars, int size_list) {
}
Vector* resultante(Vector* list_stars, int size_list) {
Vector* Fi = new_vec(0.0, 0.0);
for (int i = 0; i < size_list; i++) {
for (int j = 0; j < size_list; j++) {
if (j != i) {
/*
Vector* rj_ri = sub_vec(&(list_stars[j] -> pos), &(list_stars[i] -> pos));
int G_mi_mj = FORCE_GRAVITATION * list_stars[i] -> mass * list_stars[j] -> mass;
Vector* temp = mul_vec(rj_ri, G_mi_mj);
Fi = add_vec(Fi, temp)
*/
}
}
}
Fi -> x /= size_list;
Fi -> y /= size_list;
return Fi;
}
void new_position(Star* star, Vector resultante) {
star -> acc = *(add_vec(&(star -> acc), &resultante));
}
int random_10() {
......
......@@ -48,10 +48,10 @@ void update_pos_star(Star* star, double delta_t);
void print_star(const Star* const star);
// calcule la force résultante d'une liste de vecteurs
Vector resultante(Vector** list_vectors);
// retourne l'accélération d'une étoile d'après toutes les autres d'une liste
Vector* resultante(Vector* list_stars, int size_list);
// calcule la position de la étoile après avoir subi la force résultante des autres vecteurs (deuxième loi de Newton)
// calcule la position de l'étoile après avoir subi la force résultante des autres vecteurs (deuxième loi de Newton)
void new_position(Star* star, Vector resultante);
// calcule l'accélération
......@@ -66,7 +66,7 @@ int random_mass();
Vector random_position();
// retourne une vitesse aléatoire
Vector random_speed(Star* star);
Vector random_speed(Vector r_i, double m_i);
// calcule une super etoile d'après le poids et la position d'un groupe d'étoiles
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment