diff --git a/src/draw.c b/src/draw.c index 923a8e1827965fca443b42870a67a7e07baf1df6..83194fee6c06f4a43439c12c1a31c5f9669ece57 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1,11 +1,5 @@ #include "../utils/gfx/gfx.h" #include "field.h" -/* -(50, 50) → (75, 50)1 , (50, 50) → (72, 62), (50, 50) → (62, 72) -(50, 50) → (50, 75), (50, 50) → (38, 72), (50, 50) → (28, 62) -(50, 50) → (25, 50), (50, 50) → (28, 38), (50, 50) → (37, 28) -(50, 50) → (50, 25), (50, 50) → (62, 28), (50, 50) → (72, 37) -*/ void gfx_draw_line(struct gfx_context_t *ctxt, coordinates_t p0, coordinates_t p1, uint32_t color) { int dx = abs(p1.column - p0.column); diff --git a/src/field.c b/src/field.c index 506a8269c888d55729b2f41b934c0686d33c2f84..b0bbd1d501cd0d011349df9efe7f3711cd3c0c75 100644 --- a/src/field.c +++ b/src/field.c @@ -5,6 +5,8 @@ #include "field.h" #include "../utils/utils.h" +#define SIGN_SIZE 10 +#define CHARGE_R 25 // Compute E*qP/norm(qP) // Return false if norm(qP) < eps @@ -36,16 +38,32 @@ 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) { return EXIT_SUCCESS; } // 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) { + for (int i = 0; i < num_charges; i++) + { + coordinates_t charge_center = position_to_coordinates(CHARGE_R, CHARGE_R, x0, x1, y0, y1, charges[i].pos); + gfx_draw_circle(context, charge_center, CHARGE_R, COLOR_WHITE); + + coordinates_t sign_dst; + uint32_t sign_color = COLOR_RED; + if (charges[i].q > 0){ + sign_color = COLOR_BLUE; + sign_dst.row = charge_center.row + SIGN_SIZE; + gfx_draw_line(context, charge_center, sign_dst, sign_color); + sign_dst.row = charge_center.row - SIGN_SIZE; + gfx_draw_line(context, charge_center, sign_dst, sign_color); + } + + sign_dst.column = charge_center.column + SIGN_SIZE; + gfx_draw_line(context, charge_center, sign_dst, sign_color); + sign_dst.column = charge_center.column - SIGN_SIZE; + gfx_draw_line(context, charge_center, sign_dst, sign_color); + } } diff --git a/utils/gfx/gfx.h b/utils/gfx/gfx.h index 6e256562a7a2cee62a0c16358d36364d50ee4a03..284842977f60e9da7abb3f2ac5b00e395ecb8753 100644 --- a/utils/gfx/gfx.h +++ b/utils/gfx/gfx.h @@ -31,7 +31,7 @@ struct gfx_context_t extern void gfx_putpixel( - struct gfx_context_t *ctxt, uint32_t column, uint32_t row, uint32_t color); +struct gfx_context_t *ctxt, uint32_t column, uint32_t row, uint32_t color); extern void gfx_clear(struct gfx_context_t *ctxt, uint32_t color); extern struct gfx_context_t *gfx_create(char *text, uint32_t width, uint32_t height); extern void gfx_destroy(struct gfx_context_t *ctxt);