diff --git a/src/field.h b/src/field.h index eac1d4eb869076510343e9f4f39c0a5c7d8ce54f..45c00f3f2737c0ce2746521733d2dc9805366d14 100644 --- a/src/field.h +++ b/src/field.h @@ -1,15 +1,11 @@ #ifndef _PHYSIQUE_H_ #define _PHYSIQUE_H_ + #include "../utils/vec2/vec2.h" #include "../utils/gfx/gfx.h" #include "../utils/utils.h" #include <stdio.h> -typedef struct _charge_t { - double q; - vec2 pos; -} charge_t; - // Compute E*qP/norm(qP) // Return false if norm(qP) < eps bool compute_e(charge_t c, vec2 p, double eps, vec2 *e); @@ -22,11 +18,15 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub // starting from pos0. // Returns false if pos0 is not a valid position // (for example if pos0 is too close to a charge). -static bool draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vec2 pos0, double x0, double x1, double y0, double y1); +static bool +draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vec2 pos0, double x0, + double x1, double y0, double y1); // Draw all the charges // A circle with minus sign for negative charges // A circle with a plus sign for positive charges -static void draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1); +static void +draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, + double y1); #endif diff --git a/src/main.c b/src/main.c index 069ed50b9ec26ab97eeb7fb90b630608085a8f0e..29532002142d2a6059d90302281b3dee3bd1dc69 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,28 @@ #include <stdlib.h> +#include <time.h> #include "draw.h" +#include "../utils/utils.h" + +#define SIDE_LEN 1000 +#define WID SIDE_LEN +#define HEI WID +#define NCHARGES 2 +#define DX 0.0005 +#define NPOINTS 32 int main() { + srand(time(NULL)); + charge_t charges[NCHARGES] = { + {.q=-0.25, .pos=vec2_create(0.25, 0.5)}, + {.q=0.25, .pos=vec2_create(0.75, 0.5)}, + }; + struct gfx_context_t *ctxt = gfx_create("elec", WID, HEI); + draw_charges(ctxt, charges, NCHARGES, 0.0, 1.0, 0.0, 1.0); + for (int i = 0; i < NPOINTS; ++i) { + vec2 start = vec2_normalize(vec2_create(rand(), rand())); + draw_field_line(ctxt, charges, NCHARGES, DX, start, 0.0, 1.0, 0.0, 1.0); + } + while (gfx_keypressed() != SDLK_ESCAPE) gfx_present(ctxt); + gfx_destroy(ctxt); return EXIT_SUCCESS; }