Gravity something works idk
This commit is contained in:
4 files changed
+59
-36
No files matched your search
@@ -4,23 +4,22 @@
|
||||
#include <raylib.h>
|
||||
|
||||
void gravity(universe_t *uni) {
|
||||
mass_body_t body_1;
|
||||
mass_body_t body_2;
|
||||
for (unsigned int i = 0; i < uni->num_bodies - 1; i++) {
|
||||
body_1 = uni->bodies[i];
|
||||
const float dt = 1.0f / simx;
|
||||
for (unsigned int i = 0; i < uni->num_bodies; i++) {
|
||||
mass_body_t *body_1 = &uni->bodies[i];
|
||||
for (unsigned int y = i + 1; y < uni->num_bodies; y++) {
|
||||
body_2 = uni->bodies[y];
|
||||
float force =
|
||||
simx * NEWTON_G * body_1.mass * body_2.mass /
|
||||
(vec2_len(vec2_diff(body_2.position, body_1.position)) * TIMESTEP);
|
||||
Vector2 acceleration =
|
||||
vec2_normalize(vec2_diff(body_2.position, body_1.position));
|
||||
Vector2 acceleration_1 = vec2_scale(acceleration, force / body_1.mass);
|
||||
Vector2 acceleration_2 = vec2_scale(acceleration, -force / body_2.mass);
|
||||
body_1.speed = vec2_sum(body_1.speed, acceleration_1);
|
||||
body_2.speed = vec2_sum(body_1.speed, acceleration_2);
|
||||
uni->bodies[y] = body_2;
|
||||
mass_body_t *body_2 = &uni->bodies[y];
|
||||
Vector2 separation = vec2_diff(body_2->position, body_1->position);
|
||||
float distance_squared = vec2_dot(separation, separation);
|
||||
if (distance_squared == 0.0f) {
|
||||
continue;
|
||||
}
|
||||
Vector2 direction = vec2_normalize(separation);
|
||||
float factor = NEWTON_G * dt / distance_squared;
|
||||
body_1->speed =
|
||||
vec2_sum(body_1->speed, vec2_scale(direction, factor * body_2->mass));
|
||||
body_2->speed = vec2_sum(body_2->speed,
|
||||
vec2_scale(direction, -factor * body_1->mass));
|
||||
}
|
||||
uni->bodies[i] = body_1;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user