Skip to content
Snippets Groups Projects
Commit 76e544a8 authored by JM's avatar JM
Browse files

Programme fonctionnel

parent 5fec85a2
Branches
No related tags found
No related merge requests found
......@@ -55,11 +55,19 @@ bool draw_field_line_point(struct gfx_context_t *ctxt, charge_t *charges, int nu
compute_total_normalized_e(charges, num_charges, pos, 0.01, &e);
double norm_e = vec2_norm(e);
// Problème ici
pos_next->x = pos.x + delta * (e.x / norm_e);
pos_next->y = pos.y + delta * (e.y / norm_e);
if(pos_next->x <= 0 || pos_next->x >= 1 || pos_next->y <= 0 || pos_next->y >= 1)
return false;
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);
if(coordinate_pos_next.column <= 0 || coordinate_pos_next.row <= 0)
return false;
gfx_draw_line(ctxt, coordinate_pos, coordinate_pos_next, COLOR_YELLOW);
return !is_in_screen(coordinate_pos);
......@@ -84,22 +92,28 @@ static bool draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int n
vec2 pos_negative = vec2_create(pos0.x, pos0.y);
vec2 pos_next_positive;
vec2 pos_next_negative;
bool stop = false;
bool stop_positive = false;
bool stop_negative = 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++)
double delta = compute_delta_x();
int max_for = 100000;
for (int i = 0; i < max_for && (!stop_positive || !stop_negative); i++)
{
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_positive, &pos_next_positive, delta) ||
draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_negative, &pos_next_negative, -delta);
stop_positive = line_reach_charge(pos_positive, charges, num_charges, dx);
stop_negative = line_reach_charge(pos_negative, charges, num_charges, dx);
if(!stop_positive){
stop_positive = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_positive, &pos_next_positive, delta);
pos_positive = pos_next_positive;
}
if(!stop_negative){
stop_negative = draw_field_line_point(ctxt, charges, num_charges, x0, x1, y0, y1, pos_negative, &pos_next_negative, -delta);
pos_negative = pos_next_negative;
}
}
return !stop;
return !stop_positive || !stop_negative;
}
// Draw all the charges
......
......@@ -8,19 +8,20 @@
#define NCHARGES 2
#define DX 25
#define NLINES 5
#define NLINES 50
int main() {
charge_t charges[NCHARGES] = {
charge_create(-0.25, vec2_create(0.25, 0.5)),
charge_create(0.25, vec2_create(0.75, 0.5))
charge_create(0.25, vec2_create(0.25, 0.5)),
charge_create(-0.25, vec2_create(0.75, 0.5))
};
struct gfx_context_t *ctxt = gfx_create("elec", WID, HEI);
draw_everything(ctxt, charges, NCHARGES, NLINES, DX, 0.0, 1.0, 0.0, 1.0);
gfx_present(ctxt);
while (gfx_keypressed() != SDLK_ESCAPE) gfx_present(ctxt);
while (gfx_keypressed() != SDLK_ESCAPE);
gfx_destroy(ctxt);
return EXIT_SUCCESS;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment