Skip to content
Snippets Groups Projects
Commit 51201730 authored by BobLeHibou's avatar BobLeHibou
Browse files

ADD: create_system

parent e506aa6d
No related branches found
No related tags found
No related merge requests found
......@@ -26,8 +26,8 @@ typedef struct _system
planet_t create_planet(double mass, vec2 pos) {
planet_t p;
p.mass = mass;
p.prec_pos = pos;
p.pos = pos;
p.prec_pos = pos; // must be changed
return p;
}
......@@ -37,17 +37,48 @@ system_t create_system(double delta_t) {
system.star = create_planet(M_SOLEIL, vec2_create_zero());
system.nb_planets = 4;
system.planets = malloc(system.nb_planets * sizeof(planet_t));
double masses[system.nb_planets] = {M_MERCURE, M_VENUS, M_TERRE, M_MARS};
//TODO
vec2 positions[system.nb_planets] = {vec2_create(), vec2_create(), vec2_create(), vec2_create()};
if (NULL == system.planets) return NULL;
double masses[system.nb_planets] = {
M_MERCURE,
M_VENUS,
M_TERRE,
M_MARS};
vec2 positions[system.nb_planets] = {
vec2_create(PER_MERCURE, 0.0),
vec2_create(PER_VENUS, 0.0),
vec2_create(PER_TERRE, 0.0),
vec2_create(PER_MARS, 0.0)};
double eccentricities[system.nb_planets] = {
E_MERCURE,
E_VENUS,
E_TERRE,
E_MARS};
double axis_major[system.nb_planets] = {
A_MERCURE,
A_VENUS,
A_TERRE,
A_MARS};
for (uint32_t i = 0; i < system.nb_planets; ++i) {
system.planets[i].mass = masses[i];
system.planets[i].pos = positions[i];
double vel = G * system.star.mass * (1.0 + eccentricities[i]);
vel /= axis_major[i] * (1.0 - eccentricities[i]);
vel = sqrt(vel);
const vec2 ru = vec2_normalize(vec2_sub(system.planets[i].pos, system.star.pos));
const vec2 rp = vec2_create(-ru.y, ru.x);
const vec2 v = vec2_mul(vel, r);
system.planets[i].prec_pos = vec2_sub(system.planets[i].pos, vec2_mul(delta_t, v));
}
return system;
}
void show_system(struct gfx_context_t *ctxt, system_t *system);
void show_system(struct gfx_context_t* ctxt, system_t* system) {
//TODO
}
void update_system(system_t *system, double delta_t) {
void update_system(system_t* system, double delta_t) {
for (uint32_t i = 0; i < system->nb_planets; ++i) {
// apply the effects of the sun
vec2 a = vec2_mul((G * system->star.mass) / r_star_2, vec2_normalize(system->planets[i].pos));
......@@ -71,4 +102,6 @@ void update_system(system_t *system, double delta_t) {
}
void free_system(system_t *system);
void free_system(system_t* system) {
free(system->planets);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment