diff --git a/src/field.c b/src/field.c index 2a757d825a49aec90c8fed4c2318c9fcce8b3325..1e0d717b5f6b77288ccca0286eba3045049990e1 100644 --- a/src/field.c +++ b/src/field.c @@ -80,33 +80,26 @@ bool line_reach_charge(vec2 pos, charge_t * charges, double num_charges, double // 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) { - vec2 pos = vec2_create(pos0.x, pos0.y); - vec2 pos_next; + vec2 pos_positive = vec2_create(pos0.x, pos0.y); + vec2 pos_negative = vec2_create(pos0.x, pos0.y); + vec2 pos_next_positive; + vec2 pos_next_negative; bool stop = false; + // * 5 à supprimer lorsque le code est optimisé double delta = compute_delta_x() * 5; int max_for = 50; for (int i = 0; i < max_for && !stop; i++) { - stop = line_reach_charge(pos, charges, num_charges, dx); - - if(!stop){ - stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos, &pos_next, -delta); - pos = pos_next; - } - } - pos = vec2_create(pos0.x, pos0.y); - stop = false; - for (int i = 0; i < max_for && !stop; i++) - { - stop = line_reach_charge(pos, charges, num_charges, dx); - + stop = line_reach_charge(pos_positive, charges, num_charges, dx) || line_reach_charge(pos_negative, charges, num_charges, dx); if(!stop){ - stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos, &pos_next, delta); - pos = pos_next; + stop = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_positive, &pos_next_positive, delta) || + draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_negative, &pos_next_negative, -delta); + pos_positive = pos_next_positive; + pos_negative = pos_next_negative; } } - return EXIT_SUCCESS; + return !stop; } // Draw all the charges