From 773499df0e9a998357ddda4636f3395374a9d82f Mon Sep 17 00:00:00 2001 From: Florian Burgener <florian.burgener@etu.hesge.ch> Date: Wed, 13 Apr 2022 11:10:08 +0200 Subject: [PATCH] Draw half field line --- src/charge.c | 16 +++++----------- src/main.c | 5 ++--- src/utils.c | 4 ++-- src/vector2.c | 2 +- 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/charge.c b/src/charge.c index 3955f1c..06f27ec 100644 --- a/src/charge.c +++ b/src/charge.c @@ -14,15 +14,13 @@ const double THRESHOLD_CHARGES_DISTANCES = 0.5; const double EPSILON = 0.05; double compute_delta_x(int width, int height) { - printf("aaa %lf\n", 1.0 / sqrt((width * width) + (height * height))); return 1.0 / sqrt((width * width) + (height * height)); } bool compute_next_point(charge_t *charges, int num_charges, vector2_t current_pos, double eps, vector2_t *new_pos, double dx) { vector2_t electric_field; - if (!compute_total_normalized_e(charges, num_charges, current_pos, eps, &electric_field)) { + if (compute_total_normalized_e(charges, num_charges, current_pos, eps, &electric_field)) { *new_pos = vector2_add(current_pos, vector2_multiply(electric_field, dx)); - printf("adf %lf\n", dx); return true; } @@ -49,10 +47,12 @@ bool compute_e(charge_t c, vector2_t p, double eps, vector2_t *e) { *e = vector2_multiply(*e, -1); } - return norm_r < eps; + return norm_r >= eps; } bool compute_total_normalized_e(charge_t *charges, int num_charges, vector2_t p, double eps, vector2_t *e) { + *e = vector2_create_zero(); + for (int i = 0; i < num_charges; i += 1) { vector2_t tmp; if (!compute_e(charges[i], p, eps, &tmp)) { @@ -72,24 +72,18 @@ void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_char while (true) { vector2_t new_pos; - if (!compute_next_point(charges, num_charges, current_pos, EPSILON, &new_pos, dx)) { + if (!compute_next_point(charges, num_charges, current_pos, 4.5e-2, &new_pos, dx)) { break; } - vector2_print(current_pos); - vector2_print(new_pos); - if (is_out_of_bounds(new_pos, x0, x1, y0, y1)) { break; } coordinates_t current_coordinates = position_to_coordinates(SCREEN_WIDTH, SCREEN_HEIGHT, x0, x1, y0, y1, current_pos); - printf("%d %d\n", current_coordinates.row, current_coordinates.column); coordinates_t new_coordinates = position_to_coordinates(SCREEN_WIDTH, SCREEN_HEIGHT, x0, x1, y0, y1, new_pos); - printf("%d %d\n", new_coordinates.row, new_coordinates.column); gfx_draw_line(ctxt, current_coordinates, new_coordinates, COLOR_BLUE); current_pos = new_pos; - break; } } diff --git a/src/main.c b/src/main.c index abc0d36..b0bd3ef 100644 --- a/src/main.c +++ b/src/main.c @@ -24,15 +24,14 @@ int main(int argc, char *argv[]) { int num_charges = 2; charge_t *charges = (charge_t *)malloc(sizeof(charge_t) * num_charges); - charges[0] = charge_create(-ELEMENTARY_CHARGE, vector2_create(.5, .5)); + charges[0] = charge_create(-ELEMENTARY_CHARGE, vector2_create(.25, .5)); charges[1] = charge_create(ELEMENTARY_CHARGE, vector2_create(.75, .5)); double dx = compute_delta_x(SCREEN_WIDTH, SCREEN_HEIGHT); gfx_clear(canvas, COLOR_BLACK); draw_charges(canvas, charges, num_charges, x0, x1, y0, y1); - printf("adadf a %lf\n", dx); - draw_field_line(canvas, charges, num_charges, dx, vector2_create(.5, .2), x0, x1, y0, y1); + draw_field_line(canvas, charges, num_charges, dx, vector2_create(.5, .25), x0, x1, y0, y1); gfx_present(canvas); while (true) { diff --git a/src/utils.c b/src/utils.c index b63ba54..d0cf182 100644 --- a/src/utils.c +++ b/src/utils.c @@ -5,8 +5,8 @@ #include "vector2.h" -const int SCREEN_WIDTH = 1000; -const int SCREEN_HEIGHT = 1000; +const int SCREEN_WIDTH = 500; +const int SCREEN_HEIGHT = 500; coordinates_t coordinates_create(int row_, int column_) { coordinates_t c = {.row = row_, .column = column_}; diff --git a/src/vector2.c b/src/vector2.c index 874eee3..119e0e9 100644 --- a/src/vector2.c +++ b/src/vector2.c @@ -49,5 +49,5 @@ vector2_t vector2_fit_canvas(vector2_t v, int32_t width, int32_t height) { } void vector2_print(vector2_t v) { - printf("(%lf, %lf)\n", v.x, v.y); + printf("(%.40lf, %.40lf)\n", v.x, v.y); } -- GitLab