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

updated for friction

parent 45267e00
No related branches found
No related tags found
No related merge requests found
Pipeline #12158 failed
CC=gcc
OPTS=-g -O3 -Wall -Wextra -fsanitize=address -fsanitize=leak
OPTS=-g -O3 -Wall -Wextra -fsanitize=address -fsanitize=leak -std=c11
LINK=-lm -lasan
main: main.o particle.o ../vec2/vec2.o
main: main.o particle.o ../vec2/util.o ../vec2/vec2.o
make -C ../vec2
$(CC) $(OPTS) -o $@ $^ $(LINK)
main.o: main.c
......@@ -11,5 +12,10 @@ main.o: main.c
particle.o: particle.c particle.h
$(CC) $(OPTS) -c $^
util.o: util.c util.h
$(CC) $(OPTS) -c $^
clean:
rm -f *.o main
make -C ../vec2 clean
......@@ -8,7 +8,7 @@ int main() {
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 *parts = particle_create_random_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);
......@@ -20,5 +20,19 @@ int main() {
vec2_print(forces[ip]);
}
double k = 10.0;
vec2 vel[number];
for (int ip = 0; ip < number; ++ip) {
vel[ip] = vec2_create_random(vec2_create(0.0,0.0), vec2_create(1.0, 1.0));
}
vec2 *forces_friction = particle_compute_grav_friction_resultant_forces(parts, vel, k, number);
for (int ip = 0; ip < number; ++ip) {
printf("force %d: \n", ip);
vec2_print(forces_friction[ip]);
}
free(parts);
free(forces);
free(forces_friction);
}
\ No newline at end of file
......@@ -3,39 +3,29 @@
#include <time.h>
#include <assert.h>
#include "particle.h"
#include "../vec2/util.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) {
particle particle_create_random(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);
vec2 r = vec2_create_random(min_r, max_r);
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 *particle_create_random_list(vec2 min_r, vec2 max_r, double min_m, double max_m, int number) {
particle *p = malloc(number * sizeof(particle));
srand(time(NULL));
for (int ip = 0; ip < number; ++ip) {
p[ip] = particle_random_create(min_r, max_r, min_m, max_m);
p[ip] = particle_create_random(min_r, max_r, min_m, max_m);
}
return p;
......@@ -64,6 +54,14 @@ vec2 *particle_compute_grav_resultant_forces(particle *parts, int number) {
return forces;
}
vec2 *particle_compute_grav_friction_resultant_forces(particle *parts, vec2 *vel, double k, int number) {
vec2 *forces = particle_compute_grav_resultant_forces(parts, number);
for (int ip = 0; ip < number; ++ip) {
forces[ip] = vec2_sub(forces[ip], vec2_mul(k, vel[ip]));
}
return forces;
}
void particle_print(particle p) {
printf("m = %g\n", p.m);
vec2_print(p.r);
......
......@@ -10,14 +10,16 @@ typedef struct _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_create_random(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);
particle *particle_create_random_list(vec2 min_r, vec2 max_r, double min_m, double max_m, int number);
vec2 particle_compute_grav_force(particle lhs, particle rhs);
vec2 *particle_compute_grav_resultant_forces(particle *parts, int number);
vec2 *particle_compute_grav_friction_resultant_forces(particle *parts, vec2 *vel, double k, int number);
void particle_print(particle p);
void particle_print_list(particle *p, int number);
......
......@@ -2,7 +2,7 @@ CC=gcc
OPTS=-g -O3 -Wall -Wextra
LINK=-lm
main: main.o vec2.o
main: main.o vec2.o util.o
$(CC) $(OPTS) -o $@ $^ $(LINK)
main.o: main.c
......@@ -11,6 +11,9 @@ main.o: main.c
vec2.o: vec2.c vec2.h
$(CC) $(OPTS) -c $^
util.o: util.c util.h
$(CC) $(OPTS) -c $^
test:
make -C tests test
......
#include <stdio.h>
#include <math.h>
#include "util.h"
#include "vec2.h"
vec2 vec2_create(double x_, double y_) {
......@@ -11,6 +12,15 @@ vec2 vec2_create_zero() {
return vec2_create(0.0, 0.0);
}
vec2 vec2_create_random(vec2 min_r, vec2 max_r) {
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 r;
}
vec2 vec2_add(vec2 lhs, vec2 rhs) {
return vec2_create(
lhs.x + rhs.x,
......
......@@ -9,6 +9,8 @@ typedef struct _vec2 {
vec2 vec2_create(double x_, double y_);
vec2 vec2_create_random(vec2 min_v, vec2 max_v);
vec2 vec2_create_zero();
vec2 vec2_add(vec2 lhs, vec2 rhs);
......
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