Skip to content
Snippets Groups Projects
Commit 0658ba74 authored by JM's avatar JM
Browse files

Suppression ancien main + Bug en positon négative reglé + ajout destroy dans draw_tests

parent 7f82fe19
No related branches found
No related tags found
No related merge requests found
......@@ -52,5 +52,6 @@ int main() {
gfx_present(ctxt);
}
gfx_destroy(ctxt);
return EXIT_SUCCESS;
}
......@@ -6,7 +6,6 @@
#define SIGN_SIZE 10
#define CHARGE_R 25
bool compute_e(charge_t c, vec2 p, double eps, vec2 *e) {
vec2 relative_position = vec2_sub(p, c.pos);
if (vec2_norm(relative_position) < eps) return false;
......@@ -33,10 +32,22 @@ double compute_delta_x() {
return 1 / result;
}
// Vérifie si la position se trouve sur l'écran (entre 0 et HEI-1 ou WID-1)
bool is_in_screen(coordinates_t pos) {
return pos.column < WID && pos.row < HEI;
}
// Si la valeur sort de l'écran, force sa position à la limite la plus proche (-10 -> 0)
void force_in_screen(coordinates_t *pos){
if (!is_in_screen(*pos)){
pos->column = (int)pos->column <= 0 ? 0 : pos->column;
pos->column = (int)pos->column >= WID ? WID-1 : pos->column;
pos->row = (int)pos->row <= 0 ? 0 : pos->row;
pos->row = (int)pos->row >= HEI ? HEI-1 : pos->row;
}
}
bool draw_field_line_point(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1, vec2 pos, vec2 *pos_next, double delta) {
vec2 e;
compute_total_normalized_e(charges, num_charges, pos, 0.01, &e);
......@@ -66,7 +77,6 @@ bool line_reach_charge(vec2 pos, charge_t *charges, int num_charges, double dx)
return false;
}
/// Compute and then draw all the points belonging to a field line,
/// starting from pos0.
/// Returns false if pos0 is not a valid position
......@@ -78,7 +88,7 @@ static bool draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int n
vec2 pos_next_negative;
bool stop_positive = false;
bool stop_negative = false;
// * 5 à supprimer lorsque le code est optimisé
double delta = compute_delta_x();
int max_for = 100000;
for (int i = 0; i < max_for && (!stop_positive || !stop_negative); i++) {
......@@ -99,7 +109,6 @@ static bool draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int n
return !stop_positive || !stop_negative;
}
/// Draw all the charges
/// A circle with minus sign for negative charges
/// A circle with a plus sign for positive charges
......@@ -107,7 +116,6 @@ static void draw_charges(struct gfx_context_t *context, charge_t *charges, int n
for (int i = 0; i < num_charges; ++i) {
coordinates_t charge_center = position_to_coordinates(WID, HEI, x0, x1, y0, y1, charges[i].pos);
gfx_draw_circle(context, charge_center, CHARGE_R, COLOR_WHITE);
coordinates_t sign_src = charge_center;
coordinates_t sign_dst = charge_center;
uint32_t sign_color = COLOR_RED;
......@@ -119,9 +127,12 @@ static void draw_charges(struct gfx_context_t *context, charge_t *charges, int n
sign_src.row = charge_center.row;
sign_dst.row = charge_center.row;
}
sign_src.column -= SIGN_SIZE;
sign_dst.column += SIGN_SIZE;
force_in_screen(&sign_src);
force_in_screen(&sign_dst);
gfx_draw_line(context, sign_src, sign_dst, sign_color);
}
}
......
#include <stdlib.h>
#include "field.h"
#define NCHARGES 2
#define NC 3
#define DX 25
#define NLINES 50
void main_old() {
charge_t charges[NCHARGES] = {
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_destroy(ctxt);
}
void main_new() {
int main() {
charge_t charges[NC];
for (int i = 0; i < NC; ++i)
charges[i] = charge_create(i % 2 == 0 ? rand_one() : -rand_one(), vec2_create(rand_one(), rand_one()));
......@@ -31,14 +13,8 @@ void main_new() {
draw_everything(ctxt, charges, NC, 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);
}
int main() {
main_new();
return EXIT_SUCCESS;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment