|
|
|
@ -46,22 +46,6 @@ Vec3 vec3_normalize(Vec3 v) { |
|
|
|
return {0.0, 0.0, 0.0}; |
|
|
|
return {0.0, 0.0, 0.0}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Calculate gravitational force using Newton's law: F = G * m1 * m2 / r^2
|
|
|
|
|
|
|
|
Vec3 calculate_gravity_force(CelestialBody* body, CelestialBody* parent) { |
|
|
|
|
|
|
|
Vec3 r = vec3_sub(parent->position, body->position); |
|
|
|
|
|
|
|
double distance = vec3_magnitude(r); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Avoid division by zero
|
|
|
|
|
|
|
|
if (distance < 1.0) { |
|
|
|
|
|
|
|
distance = 1.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double force_magnitude = G * body->mass * parent->mass / (distance * distance); |
|
|
|
|
|
|
|
Vec3 direction = vec3_normalize(r); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return vec3_scale(direction, force_magnitude); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Calculate acceleration from force: a = F / m
|
|
|
|
// Calculate acceleration from force: a = F / m
|
|
|
|
Vec3 calculate_acceleration(Vec3 force, double mass) { |
|
|
|
Vec3 calculate_acceleration(Vec3 force, double mass) { |
|
|
|
if (mass > 0.0) { |
|
|
|
if (mass > 0.0) { |
|
|
|
|