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

ADD: draw_everything(...)

parent 14760f3d
Branches
No related tags found
No related merge requests found
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include "draw.h"
#include "field.h"
#include "../utils/utils.h"
#define SIGN_SIZE 10
#define CHARGE_R 25
// Compute E*qP/norm(qP)
// Return false if norm(qP) < eps
/// qP = vectoriel(P-q)
......@@ -38,22 +39,25 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vec2 p, doub
// starting from pos0.
// 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) {
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;
}
// Draw all the charges
// A circle with minus sign for negative 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) {
for (int i = 0; i < num_charges; i++)
{
static void
draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0,
double y1) {
for (int i = 0; i < num_charges; i++) {
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){
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);
......@@ -67,3 +71,18 @@ static void draw_charges(struct gfx_context_t *context, charge_t *charges, int n
gfx_draw_line(context, charge_center, sign_dst, sign_color);
}
}
void draw_everything(
struct gfx_context_t *ctxt,
charge_t *charges,
int num_charges,
int num_lines,
double dx,
double x0, double x1,
double y0, double y1) {
draw_charges(ctxt, charges, num_charges, x0, x1, y0, y1);
for (int i = 0; i < num_lines; ++i) {
vec2 pos0 = vec2_normalize(vec2_create(rand(), rand()));
draw_field_line(ctxt, charges, num_charges, dx, pos0, x0, x1, y0, y1);
}
}
......@@ -29,4 +29,13 @@ static void
draw_charges(struct gfx_context_t *context, charge_t *charges, int num_charges, double x0, double x1, double y0,
double y1);
void draw_everything(
struct gfx_context_t *ctxt,
charge_t *charges,
int num_charges,
int num_lines,
double dx,
double x0, double x1,
double y0, double y1);
#endif
#include <stdlib.h>
#include <time.h>
#include "draw.h"
#include "field.h"
#include "../utils/utils.h"
#define SIDE_LEN 1000
#define WID SIDE_LEN
#define HEI WID
#define NCHARGES 2
#define DX 0.0005
#define NPOINTS 32
#define NLINES 32
int main() {
srand(time(NULL));
......@@ -17,11 +21,7 @@ int main() {
{.q=0.25, .pos=vec2_create(0.75, 0.5)},
};
struct gfx_context_t *ctxt = gfx_create("elec", WID, HEI);
draw_charges(ctxt, charges, NCHARGES, 0.0, 1.0, 0.0, 1.0);
for (int i = 0; i < NPOINTS; ++i) {
vec2 start = vec2_normalize(vec2_create(rand(), rand()));
draw_field_line(ctxt, charges, NCHARGES, DX, start, 0.0, 1.0, 0.0, 1.0);
}
draw_everything(ctxt, charges, NCHARGES, NLINES, DX, 0.0, 1.0, 0.0, 1.0);
while (gfx_keypressed() != SDLK_ESCAPE) gfx_present(ctxt);
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