Select Git revision
Forked from
programmation_sequentielle / travaux_pratiques / c_lang / simulation_galaxie / enonce
Source project has a limited visibility.
star.c 5.32 KiB
#include <math.h>
#include "star.h"
/* * * * * * * * * * * * * * * * *
* *
* --- FONCTIONS --- *
* *
* * * * * * * * * * * * * * * * */
Star* new_star_vel(Vector new_pos, Vector new_speed, Vector new_acc, double new_mass, double new_dt) {
Star* new_star = malloc(sizeof(Star));
new_star -> pos = new_pos;
new_star -> acc = new_acc;
new_star -> mass = new_mass;
// on multiplie le vecteur speed par delta_t (qui retourne un pointeur sur vecteur, que l'on déréférence)
Vector* pos_tmp = mul_vec(&new_speed, new_dt);
new_star -> previous_pos = *pos_tmp;
free(pos_tmp);
// et on soustrait ce résultat au vecteur position (qui retourne un pointeur sur vecteur, que l'on déréférence)
pos_tmp = sub_vec(&(new_star -> previous_pos), &(new_star -> pos));
new_star -> previous_pos = *pos_tmp;
free(pos_tmp);
pos_tmp = NULL;
return new_star;
}
void reset_acc(Star* star) {
Vector vec_null;
vec_null.x = 0.0;
vec_null.y = 0.0;
star -> acc = vec_null;
}
void update_acc(Star* target, const Star* const 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* 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)));
star -> pos = *(add_vec(&(star -> pos), mul_vec(&(star -> acc), delta_t * delta_t)));
}
void print_star(const Star* const star) {
printf("\tprint_star() : \tposition = (%f ; %f) \n\t\t \
position precedente = (%f ; %f) \n\t\t \
acceleration = (%f ; %f) \n\t\t \
masse = %f \n", star -> pos.x, star -> pos.y, star -> previous_pos.x, star -> previous_pos.y, star -> acc.x, star -> acc.y, star -> mass);