17 #include <cglm/types.h>
78 double prev_position[3];
int nbody_get_count(const NBodySim *sim)
Returns the number of active bodies.
Definition: nbody.c:449
void nbody_init_preset(NBodySim *sim)
Initializes the simulation with a preset solar system configuration.
Definition: nbody.c:110
float nbody_energy_drift_signed(const NBodySim *sim)
Definition: nbody.c:476
static const float NBODY_CONFINEMENT_DAMPING
Definition: nbody.h:64
static const float NBODY_MAX_ACCUMULATOR
Definition: nbody.h:44
static const float NBODY_DEFAULT_G
Definition: nbody.h:24
void nbody_step(NBodySim *sim, float delta_time)
Advances the simulation by the given wall-clock delta time.
Definition: nbody.c:389
static const float NBODY_FIXED_DT
Definition: nbody.h:38
float nbody_total_energy(const NBodySim *sim)
Computes the total energy (kinetic + gravitational potential).
Definition: nbody.c:180
float nbody_energy_drift(const NBodySim *sim)
Returns the relative energy drift |E(t) - E₀| / |E₀|.
Definition: nbody.c:464
static const float NBODY_SOFTENING_FACTOR
Definition: nbody.h:35
@ NBODY_MAX_BODIES
Definition: nbody.h:21
static const float NBODY_TIME_SCALE_RATE
Definition: nbody.h:87
static const float NBODY_CONFINEMENT_RADIUS
Definition: nbody.h:50
void nbody_write_instances(const NBodySim *sim, SphereInstance *out)
Writes current body positions and materials into a SphereInstance array suitable for the instanced re...
Definition: nbody.c:428
void nbody_update_time_scale(NBodySim *sim, float delta_time)
Smoothly transitions time_scale toward target_time_scale.
Definition: nbody.c:490
float nbody_kinetic_energy(const NBodySim *sim)
Computes kinetic energy only: Σ ½ m v².
Definition: nbody.c:454
static const float NBODY_SOFTENING_SQ
Definition: nbody.h:29
static const float NBODY_CONFINEMENT_K
Definition: nbody.h:55
Pure-data type for per-instance sphere attributes.
Records a confinement boundary hit for visual effects.
Definition: nbody.h:97
vec3 color
Definition: nbody.h:99
bool active
Definition: nbody.h:101
vec3 position
Definition: nbody.h:98
float velocity
Definition: nbody.h:100
A single gravitational body.
Definition: nbody.h:70
float roughness
Definition: nbody.h:77
float radius
Definition: nbody.h:74
double mass
Definition: nbody.h:72
vec3 albedo
Definition: nbody.h:75
float metallic
Definition: nbody.h:76
State container for the N-body simulation.
Definition: nbody.h:104
float initial_energy
Definition: nbody.h:111
NBodyParticle bodies[NBODY_MAX_BODIES]
Definition: nbody.h:105
bool paused
Definition: nbody.h:113
float target_time_scale
Definition: nbody.h:110
float accumulator
Definition: nbody.h:108
int body_count
Definition: nbody.h:106
float gravity
Definition: nbody.h:107
float time_scale
Definition: nbody.h:109
float sim_time
Definition: nbody.h:112
NBodyImpact impacts[NBODY_MAX_BODIES]
Definition: nbody.h:117
Per-instance data sent to the shader via an instanced VBO.
Definition: sphere_types.h:25