Skip to content
Snippets Groups Projects
Commit 4edafe06 authored by Boris Stefanovic's avatar Boris Stefanovic
Browse files

ADD: compute_e(...) and compute_total_normalized_e(...)

parent bf121f31
No related branches found
No related tags found
No related merge requests found
#include "physics.h"
#include <math.h> #include <math.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include "physics.h"
// 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){ /// qP = vectoriel(P-q)
return EXIT_SUCCESS; /// Compute the vector value of the field generated by a charge at a given point in space.
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;
double field = K * c.q / vec2_norm_sqr(relative_position);
*e = vec2_mul(field, vec2_normalize(relative_position));
return true;
} }
// Compute the normalized sum of Ei*qiP/norm(qiP) // Compute the normalized sum of Ei*qiP/norm(qiP)
// Return false if for some qiP, norm(qiP) < eps // Return false if for some qiP, norm(qiP) < eps
bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, double eps, vec2 *e){ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, double eps, vec2 *e) {
return EXIT_SUCCESS; *e = vec2_create_zero();
vec2 ei = vec2_create_zero();
for (size_t i = 0; i < num_charges; ++i) {
if (!compute_e(charges[i], p, eps, &ei)) return false;
*e = vec2_add(acc, ei);
}
return true;
} }
// Compute and then draw all the points belonging to a field line, // Compute and then draw all the points belonging to a field line,
// 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 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){ 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) {
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 draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1){ static void draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1) {
} }
...@@ -5,11 +5,10 @@ ...@@ -5,11 +5,10 @@
#include "../utils/utils.h" #include "../utils/utils.h"
#include <stdio.h> #include <stdio.h>
typedef struct charge_t typedef struct _charge_t {
{ double q;
double q; vec2 pos;
vec2 pos; } charge_t;
} charge;
// Compute E*qP/norm(qP) // Compute E*qP/norm(qP)
// Return false if norm(qP) < eps // Return false if norm(qP) < eps
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment