diff --git a/src/field.c b/src/field.c index 293f84a77cbad7ae64e8bf5fa748d039fc056983..65cb90e13a16c3c83105da75057661b7f62c28a0 100644 --- a/src/field.c +++ b/src/field.c @@ -9,7 +9,6 @@ #define SIGN_SIZE 10 #define CHARGE_R 25 - // Compute E*qP/norm(qP) // Return false if norm(qP) < eps /// qP = vectoriel(P-q) @@ -35,6 +34,11 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub return true; } +double compute_delta_x(){ + double result = pow(WID, 2) + pow(HEI, 2); + result = sqrt(result); + return 1 / result; +} // Compute and then draw all the points belonging to a field line, // starting from pos0. @@ -43,12 +47,27 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub 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) { vec2 pos = vec2_create(pos0.x, pos0.y); vec2 pos_sum; - for (int i = 0; i < num_charges; i++) + vec2 pos_next; + vec2 e; + double delta = compute_delta_x(); + // Remplacer par une boucle qui s'arrĂȘte lorsqu'on atteint une charge + for (int i = 0; i < 100; i++) { - //compute_e(charges[i], ..., &pos_sum); + compute_total_normalized_e(charges, num_charges, pos, 0.01, &e); + pos_next.x = pos.x + delta * (e.x / vec2_normalize(e).x); + pos_next.y = pos.y + delta * (e.y / vec2_normalize(e).y); + + //printf("%f + %f * (%f / %f)\n", pos.x, delta, e.x, vec2_normalize(e).x); + //printf("%f %f\n", pos_next.x, pos_next.y); + + coordinates_t coordinate_pos = position_to_coordinates(WID, HEI, x0, x1, y0, y1, pos); + coordinates_t coordinate_pos_next = position_to_coordinates(WID, HEI, x0, x1, y0, y1, pos_next); + //printf("%d %d\n", charge_1.column, charge_1.row); + //printf("%d %d\n\n", charge_2.column, charge_2.row); + gfx_draw_line(ctxt, coordinate_pos, coordinate_pos_next, COLOR_YELLOW); + pos = pos_next; } - //vec2 pos_next = return EXIT_SUCCESS; } @@ -87,9 +106,10 @@ void draw_everything( double dx, double x0, double x1, double y0, double y1) { + srand(time(NULL)); draw_charges(ctxt, charges, num_charges, x0, x1, y0, y1); for (int i = 0; i < num_lines; ++i) { - vec2 pos0 = vec2_normalize(vec2_create(rand(), rand())); + vec2 pos0 = vec2_create((double)rand() / RAND_MAX, (double)rand() / RAND_MAX); draw_field_line(ctxt, charges, num_charges, dx, pos0, x0, x1, y0, y1); } } diff --git a/src/main.c b/src/main.c index 085c65139147b65cf03da8240fd2e9e9d244be61..af327616c08c705db7b12bd0a3f97c01a1cb7bf9 100644 --- a/src/main.c +++ b/src/main.c @@ -12,7 +12,6 @@ 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)},