Skip to content
Snippets Groups Projects
Select Git revision
  • 868c8ae91709b5530fd0316a6fe2b1906b7539be
  • master default protected
2 results

star.c

Blame
  • 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);