Skip to content
Snippets Groups Projects
Unverified Commit b4e18a64 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added particle code

parent 04b411eb
No related branches found
No related tags found
No related merge requests found
CC=gcc
OPTS=-g -O3 -Wall -Wextra
LINK=-lm
main: main.o particle.o ../vec2/vec2.o
$(CC) $(OPTS) -o $@ $^ $(LINK)
main.o: main.c
$(CC) $(OPTS) -c $^
particle.o: particle.c particle.h
$(CC) $(OPTS) -c $^
clean:
rm -f *.o main
#include "../vec2/vec2.h"
#include "particle.h"
int main() {
particle p = particle_create(vec2_create(0.0,0.0), 1.0);
particle_print(p);
int number = 10;
particle *parts = particle_random_create_list(vec2_create(0.0,0.0), vec2_create(1.0, 1.0), 0.0, 10.0, number);
particle_print_list(parts, number);
vec2 force = particle_compute_grav_force(parts[0], p);
vec2_print(force);
}
\ No newline at end of file
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <assert.h>
#include "particle.h"
static double G = 6.27e-11;
static double rand_to_range(double x0, double x1) {
double delta = x1 - x0;
double rescaled = (double)rand() / RAND_MAX * delta + x0;
return rescaled;
}
particle particle_create(vec2 r_, double m_) {
particle p = {.r = r_, .m = m_};
return p;
}
particle particle_random_create(vec2 min_r, vec2 max_r, double min_m, double max_m) {
double m = rand_to_range(min_m, max_m);
double x = rand_to_range(min_r.x, max_r.x);
double y = rand_to_range(min_r.y, max_r.y);
vec2 r = vec2_create(x, y);
return particle_create(r, m);
}
particle *particle_random_create_list(vec2 min_r, vec2 max_r, double min_m, double max_m, int number) {
particle *p = malloc(number * sizeof(particle_create));
srand(time(NULL));
for (int ip = 0; ip < number; ++ip) {
p[ip] = particle_random_create(min_r, max_r, min_m, max_m);
}
return p;
}
vec2 particle_compute_grav_force(particle lhs, particle rhs) {
vec2 rij = vec2_sub(lhs.r, rhs.r);
double distance = vec2_norm(rij);
assert(distance > 1e-10);
double factor = G * lhs.m * rhs.m / (distance * distance * distance);
printf("factor = %g %g %g %g %g\n", factor, lhs.m, rhs.m, distance, G);
return vec2_mul(factor, rij);
}
void particle_print(particle p) {
printf("m = %g\n", p.m);
vec2_print(p.r);
}
void particle_print_list(particle *p, int number) {
for (int ip = 0; ip < number; ++ip) {
printf("particle %d: \n", ip);
particle_print(p[ip]);
}
}
#ifndef _PARTICLE_H_
#define _PARTICLE_H_
#include "../vec2/vec2.h"
typedef struct _particle {
vec2 r;
double m;
} particle;
particle particle_create(vec2 r_, double m_);
particle particle_random_create(vec2 min_r, vec2 max_r, double min_m, double max_m);
particle *particle_random_create_list(vec2 min_r, vec2 max_r, double min_m, double max_m, int number);
vec2 particle_compute_grav_force(particle lhs, particle rhs);
void particle_print(particle p);
void particle_print_list(particle *p, int number);
#endif
\ No newline at end of file
......@@ -51,5 +51,5 @@ bool vec2_is_approx_equal(vec2 lhs, vec2 rhs, double eps) {
}
void vec2_print(vec2 v) {
printf("x = %f, y = %f\n", v.x, v.y);
printf("x = %g, y = %g\n", v.x, v.y);
}
\ No newline at end of file
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