Skip to content
Snippets Groups Projects
Commit 835bca55 authored by JM's avatar JM
Browse files

ADD: draw_charges(...) RM: field.h: struct charge

parent 0ea1da04
No related branches found
No related tags found
No related merge requests found
#include "../utils/gfx/gfx.h" #include "../utils/gfx/gfx.h"
#include "field.h" #include "field.h"
/*
(50, 50) → (75, 50)1 , (50, 50) → (72, 62), (50, 50) → (62, 72)
(50, 50) → (50, 75), (50, 50) → (38, 72), (50, 50) → (28, 62)
(50, 50) → (25, 50), (50, 50) → (28, 38), (50, 50) → (37, 28)
(50, 50) → (50, 25), (50, 50) → (62, 28), (50, 50) → (72, 37)
*/
void gfx_draw_line(struct gfx_context_t *ctxt, coordinates_t p0, coordinates_t p1, uint32_t color) { void gfx_draw_line(struct gfx_context_t *ctxt, coordinates_t p0, coordinates_t p1, uint32_t color) {
int dx = abs(p1.column - p0.column); int dx = abs(p1.column - p0.column);
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "field.h" #include "field.h"
#include "../utils/utils.h" #include "../utils/utils.h"
#define SIGN_SIZE 10
#define CHARGE_R 25
// Compute E*qP/norm(qP) // Compute E*qP/norm(qP)
// Return false if norm(qP) < eps // Return false if norm(qP) < eps
...@@ -36,16 +38,32 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub ...@@ -36,16 +38,32 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub
// starting from pos0. // starting from pos0.
// Returns false if pos0 is not a valid position // Returns false if pos0 is not a valid position
// (for example if pos0 is too close to a charge). // (for example if pos0 is too close to a charge).
static bool 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) {
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) {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
// Draw all the charges // Draw all the charges
// A circle with minus sign for negative charges // A circle with minus sign for negative charges
// A circle with a plus sign for positive charges // A circle with a plus sign for positive charges
static void static void draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1) {
draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, for (int i = 0; i < num_charges; i++)
double y1) { {
coordinates_t charge_center = position_to_coordinates(CHARGE_R, CHARGE_R, x0, x1, y0, y1, charges[i].pos);
gfx_draw_circle(context, charge_center, CHARGE_R, COLOR_WHITE);
coordinates_t sign_dst;
uint32_t sign_color = COLOR_RED;
if (charges[i].q > 0){
sign_color = COLOR_BLUE;
sign_dst.row = charge_center.row + SIGN_SIZE;
gfx_draw_line(context, charge_center, sign_dst, sign_color);
sign_dst.row = charge_center.row - SIGN_SIZE;
gfx_draw_line(context, charge_center, sign_dst, sign_color);
}
sign_dst.column = charge_center.column + SIGN_SIZE;
gfx_draw_line(context, charge_center, sign_dst, sign_color);
sign_dst.column = charge_center.column - SIGN_SIZE;
gfx_draw_line(context, charge_center, sign_dst, sign_color);
}
} }
...@@ -5,11 +5,6 @@ ...@@ -5,11 +5,6 @@
#include "../utils/utils.h" #include "../utils/utils.h"
#include <stdio.h> #include <stdio.h>
typedef struct _charge_t {
double q;
vec2 pos;
} charge_t;
// Compute E*qP/norm(qP) // Compute E*qP/norm(qP)
// Return false if norm(qP) < eps // Return false if norm(qP) < eps
bool compute_e(charge_t c, vec2 p, double eps, vec2 *e); bool compute_e(charge_t c, vec2 p, double eps, vec2 *e);
......
...@@ -2,5 +2,6 @@ ...@@ -2,5 +2,6 @@
#include "draw.h" #include "draw.h"
int main() { int main() {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
...@@ -31,7 +31,7 @@ struct gfx_context_t ...@@ -31,7 +31,7 @@ struct gfx_context_t
extern void gfx_putpixel( extern void gfx_putpixel(
struct gfx_context_t *ctxt, uint32_t column, uint32_t row, uint32_t color); struct gfx_context_t *ctxt, uint32_t column, uint32_t row, uint32_t color);
extern void gfx_clear(struct gfx_context_t *ctxt, uint32_t color); extern void gfx_clear(struct gfx_context_t *ctxt, uint32_t color);
extern struct gfx_context_t *gfx_create(char *text, uint32_t width, uint32_t height); extern struct gfx_context_t *gfx_create(char *text, uint32_t width, uint32_t height);
extern void gfx_destroy(struct gfx_context_t *ctxt); extern void gfx_destroy(struct gfx_context_t *ctxt);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment