From 9fcf86cbbfefa34dc35b0bffe7666f1918681b73 Mon Sep 17 00:00:00 2001 From: Pierre Date: Wed, 30 Sep 2026 22:26:06 +0200 Subject: [PATCH 1/2] start of electromagnetism Tesla would be proud --- cphysics.c | 9 --------- main.c | 2 ++ objects.h | 1 + 3 files changed, 3 insertions(+), 9 deletions(-) delete mode 100644 cphysics.c diff --git a/cphysics.c b/cphysics.c deleted file mode 100644 index 4fe1f84..0000000 --- a/cphysics.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "cphysics.h" -#include "objects.h" - -void gravity(universe_t* univ){ - -} -void magnetism(universe_t* univ){ - -} diff --git a/main.c b/main.c index f575a3e..796c207 100644 --- a/main.c +++ b/main.c @@ -2,6 +2,7 @@ #include "consts.h" #include "mechanics.h" +#include "magnetism.h" #include #include #include @@ -31,6 +32,7 @@ void *physics(void *args) { while (true) { clock_gettime(CLOCK_MONOTONIC, &ct); mechanics(uni); + magnetism(uni); ot = ct; long long elapsed = timespec_diff_ns(ct, ot); long long remaining = TIMESTEP / simx - elapsed; diff --git a/objects.h b/objects.h index d194f5c..95ddd09 100644 --- a/objects.h +++ b/objects.h @@ -7,6 +7,7 @@ typedef struct { float radius; Vector2 position; Vector2 speed; + float charge; } mass_body_t; typedef struct universe { From 09384b878fb2554b259b02f6abc05374ccacd55c Mon Sep 17 00:00:00 2001 From: Pierre Date: Wed, 30 Sep 2026 23:44:19 +0200 Subject: [PATCH 2/2] added charges --- magnetism.c | 24 ++++++++++++++++++++++++ magnetism.h | 7 +++++++ 2 files changed, 31 insertions(+) create mode 100644 magnetism.c create mode 100644 magnetism.h diff --git a/magnetism.c b/magnetism.c new file mode 100644 index 0000000..b49e8c8 --- /dev/null +++ b/magnetism.c @@ -0,0 +1,24 @@ +#include "magnetism.h" +#include "consts.h" +#include "vec_utils.h" +#include + +#define EPSILON 8.85418782E-12 + +void magnetism(universe_t* uni){ + mass_body_t body_1; + mass_body_t body_2; + Vector2 diff, force; + for (unsigned int i = 0; i < uni->num_bodies-1; i++) { + body_1 = uni->bodies[i]; + for (unsigned int y = i + 1; y < uni->num_bodies; y++) { + body_2 = uni->bodies[y]; + diff=vec2_diff(body_2.position,body_1.position); + force = vec2_scale(diff,body_1.charge*body_2.charge/(4*PI*EPSILON*vec2_len(diff))); + body_1.speed=vec2_sum(body_1.speed,vec2_scale(force,1/body_1.mass)); + body_2.speed=vec2_diff(body_2.speed,vec2_scale(force,1/body_2.mass)); + uni->bodies[y] = body_2; + } + uni->bodies[i] = body_1; + } +} diff --git a/magnetism.h b/magnetism.h new file mode 100644 index 0000000..7a49931 --- /dev/null +++ b/magnetism.h @@ -0,0 +1,7 @@ +#ifndef MAGNETISM_H +#define MAGNETISM_H +#include "objects.h" +void magnetism(universe_t* univ); + + +#endif // MAGNETISM_H