Skip to content
Snippets Groups Projects
Commit 8f3cce37 authored by gawen.ackerman's avatar gawen.ackerman :robot:
Browse files

draw_line_field

parent 773499df
Branches
No related tags found
No related merge requests found
......@@ -17,10 +17,10 @@ double compute_delta_x(int width, int height) {
return 1.0 / sqrt((width * width) + (height * height));
}
bool compute_next_point(charge_t *charges, int num_charges, vector2_t current_pos, double eps, vector2_t *new_pos, double dx) {
bool compute_next_point(charge_t *charges, int num_charges, vector2_t current_pos, double eps, vector2_t *new_pos, double dx, int orientation) {
vector2_t electric_field;
if (compute_total_normalized_e(charges, num_charges, current_pos, eps, &electric_field)) {
*new_pos = vector2_add(current_pos, vector2_multiply(electric_field, dx));
*new_pos = vector2_add(current_pos, vector2_multiply(vector2_multiply(electric_field, dx), orientation));
return true;
}
......@@ -66,13 +66,13 @@ bool compute_total_normalized_e(charge_t *charges, int num_charges, vector2_t p,
return true;
}
void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1) {
void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1, int orientation) {
vector2_t current_pos = pos0;
while (true) {
vector2_t new_pos;
if (!compute_next_point(charges, num_charges, current_pos, 4.5e-2, &new_pos, dx)) {
if (!compute_next_point(charges, num_charges, current_pos, 4.5e-2, &new_pos, dx, orientation)) {
break;
}
......@@ -82,11 +82,16 @@ void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_char
coordinates_t current_coordinates = position_to_coordinates(SCREEN_WIDTH, SCREEN_HEIGHT, x0, x1, y0, y1, current_pos);
coordinates_t new_coordinates = position_to_coordinates(SCREEN_WIDTH, SCREEN_HEIGHT, x0, x1, y0, y1, new_pos);
gfx_draw_line(ctxt, current_coordinates, new_coordinates, COLOR_BLUE);
gfx_draw_line(ctxt, current_coordinates, new_coordinates, COLOR_WHITE);
current_pos = new_pos;
}
}
void draw_field_lines(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1){
draw_field_line(ctxt, charges, num_charges, dx, pos0, x0, x1, y0, y1, -1);
draw_field_line(ctxt, charges, num_charges, dx, pos0, x0, x1, y0, y1, 1);
}
void draw_charges(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1) {
for (int32_t i = 0; i < num_charges; i += 1) {
coordinates_t c = position_to_coordinates(SCREEN_WIDTH, SCREEN_HEIGHT, x0, x1, y0, y1, charges[i].pos);
......
......@@ -22,7 +22,7 @@ charge_t charge_create(double q, vector2_t pos);
bool compute_e(charge_t c, vector2_t p, double eps, vector2_t *e);
bool compute_total_normalized_e(charge_t *charges, int num_charges, vector2_t p, double eps, vector2_t *e);
void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1);
void draw_field_line(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1, int orientation);
void draw_charges(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double x0, double x1, double y0, double y1);
void draw_field_lines(struct gfx_context_t *ctxt, charge_t *charges, int num_charges, double dx, vector2_t pos0, double x0, double x1, double y0, double y1);
#endif
......@@ -31,7 +31,7 @@ int main(int argc, char *argv[]) {
gfx_clear(canvas, COLOR_BLACK);
draw_charges(canvas, charges, num_charges, x0, x1, y0, y1);
draw_field_line(canvas, charges, num_charges, dx, vector2_create(.5, .25), x0, x1, y0, y1);
draw_field_lines(canvas, charges, num_charges, dx, vector2_create(.5, .25), x0, x1, y0, y1);
gfx_present(canvas);
while (true) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment