Welcome to IA game
Dakshdd
Recent community posts
#define NUM_PARTICLES 1 // Two dimensional vector. typedef struct { float x; float y; } Vector2; // Two dimensional particle. typedef struct { Vector2 position; Vector2 velocity; float mass; } Particle; // Global array of particles. Particle particles[NUM_PARTICLES]; // Prints all particles' position to the output. We could instead draw them on screen // in a more interesting application. void PrintParticles() { for (int i = 0; i < NUM_PARTICLES; ++i) { Particle *particle = &particles[i]; printf("particle[%i] (%.2f, %.2f)\n", i, particle->position.x, particle->position.y); } } // Initializes all particles with random positions, zero velocities and 1kg mass. void InitializeParticles() { for (int i = 0; i < NUM_PARTICLES; ++i) { particles[i].position = (Vector2){arc4random_uniform(50), arc4random_uniform(50)}; particles[i].velocity = (Vector2){0, 0}; particles[i].mass = 1; } } // Just applies Earth's gravity force (mass times gravity acceleration 9.81 m/s^2) to each particle. Vector2 ComputeForce(Particle *particle) { return (Vector2){0, particle->mass * -9.81}; } void RunSimulation() { float totalSimulationTime = 10; // The simulation will run for 10 seconds. float currentTime = 0; // This accumulates the time that has passed. float dt = 1; // Each step will take one second. InitializeParticles(); PrintParticles(); while (currentTime < totalSimulationTime) { // We're sleeping here to keep things simple. In real applications you'd use some // timing API to get the current time in milliseconds and compute dt in the beginning // of every iteration like this: // currentTime = GetTime() // dt = currentTime - previousTime // previousTime = currentTime sleep(dt); for (int i = 0; i < NUM_PARTICLES; ++i) { Particle *particle = &particles[i]; Vector2 force = ComputeForce(particle); Vector2 acceleration = (Vector2){force.x / particle->mass, force.y / particle->mass}; particle->velocity.x += acceleration.x * dt; particle->velocity.y += acceleration.y * dt; particle->position.x += particle->velocity.x * dt; particle->position.y += particle->velocity.y * dt; } PrintParticles(); currentTime += dt; } }
#define NUM_PARTICLES 1 // Two dimensional vector. typedef struct { float x; float y; } Vector2; // Two dimensional particle. typedef struct { Vector2 position; Vector2 velocity; float mass; } Particle; // Global array of particles. Particle particles[NUM_PARTICLES]; // Prints all particles' position to the output. We could instead draw them on screen // in a more interesting application. void PrintParticles() { for (int i = 0; i < NUM_PARTICLES; ++i) { Particle *particle = &particles[i]; printf("particle[%i] (%.2f, %.2f)\n", i, particle->position.x, particle->position.y); } } // Initializes all particles with random positions, zero velocities and 1kg mass. void InitializeParticles() { for (int i = 0; i < NUM_PARTICLES; ++i) { particles[i].position = (Vector2){arc4random_uniform(50), arc4random_uniform(50)}; particles[i].velocity = (Vector2){0, 0}; particles[i].mass = 1; } } // Just applies Earth's gravity force (mass times gravity acceleration 9.81 m/s^2) to each particle. Vector2 ComputeForce(Particle *particle) { return (Vector2){0, particle->mass * -9.81}; } void RunSimulation() { float totalSimulationTime = 10; // The simulation will run for 10 seconds. float currentTime = 0; // This accumulates the time that has passed. float dt = 1; // Each step will take one second. InitializeParticles(); PrintParticles(); while (currentTime < totalSimulationTime) { // We're sleeping here to keep things simple. In real applications you'd use some // timing API to get the current time in milliseconds and compute dt in the beginning // of every iteration like this: // currentTime = GetTime() // dt = currentTime - previousTime // previousTime = currentTime sleep(dt); for (int i = 0; i < NUM_PARTICLES; ++i) { Particle *particle = &particles[i]; Vector2 force = ComputeForce(particle); Vector2 acceleration = (Vector2){force.x / particle->mass, force.y / particle->mass}; particle->velocity.x += acceleration.x * dt; particle->velocity.y += acceleration.y * dt; particle->position.x += particle->velocity.x * dt; particle->position.y += particle->velocity.y * dt; } PrintParticles(); currentTime += dt; } }
#define NUM_PARTICLES 1
// Two dimensional vector.
typedef struct {
float x;
float y;
} Vector2;
// Two dimensional particle.
typedef struct {
Vector2 position;
Vector2 velocity;
float mass;
} Particle;
// Global array of particles.
Particle particles[NUM_PARTICLES];
// Prints all particles' position to the output. We could instead draw them on screen
// in a more interesting application.
void PrintParticles() {
for (int i = 0; i < NUM_PARTICLES; ++i) {
Particle *particle = &particles[i];
printf("particle[%i] (%.2f, %.2f)\n", i, particle->position.x, particle->position.y);
}
}
// Initializes all particles with random positions, zero velocities and 1kg mass.
void InitializeParticles() {
for (int i = 0; i < NUM_PARTICLES; ++i) {
particles[i].position = (Vector2){arc4random_uniform(50), arc4random_uniform(50)};
particles[i].velocity = (Vector2){0, 0};
particles[i].mass = 1;
}
}
// Just applies Earth's gravity force (mass times gravity acceleration 9.81 m/s^2) to each particle.
Vector2 ComputeForce(Particle *particle) {
return (Vector2){0, particle->mass * -9.81};
}
void RunSimulation() {
float totalSimulationTime = 10; // The simulation will run for 10 seconds.
float currentTime = 0; // This accumulates the time that has passed.
float dt = 1; // Each step will take one second.
InitializeParticles();
PrintParticles();
while (currentTime < totalSimulationTime) {
// We're sleeping here to keep things simple. In real applications you'd use some
// timing API to get the current time in milliseconds and compute dt in the beginning
// of every iteration like this:
// currentTime = GetTime()
// dt = currentTime - previousTime
// previousTime = currentTime
sleep(dt);
for (int i = 0; i < NUM_PARTICLES; ++i) {
Particle *particle = &particles[i];
Vector2 force = ComputeForce(particle);
Vector2 acceleration = (Vector2){force.x / particle->mass, force.y / particle->mass};
particle->velocity.x += acceleration.x * dt;
particle->velocity.y += acceleration.y * dt;
particle->position.x += particle->velocity.x * dt;
particle->position.y += particle->velocity.y * dt;
}
PrintParticles();
currentTime += dt;
}
}