diff --git a/src/main.c b/src/main.c index 7fc6b8b9aee8a7bde34a055671758748b4aaf523..e6124922d96c2104eae3d54ac9b7a6bf430947b9 100644 --- a/src/main.c +++ b/src/main.c @@ -22,17 +22,43 @@ int main(int argc, char *argv[]) { double x1 = 1; double y1 = 1; - int num_charges = 2, num_points = 100; + int num_charges = 4; charge_t *charges = (charge_t *)malloc(sizeof(charge_t) * num_charges); - charges[0] = charge_create(-ELEMENTARY_CHARGE, vector2_create(.25, .5)); - charges[1] = charge_create(ELEMENTARY_CHARGE, vector2_create(.75, .5)); + charges[0] = charge_create(ELEMENTARY_CHARGE * 5, vector2_create(.25, .5)); + charges[1] = charge_create(-ELEMENTARY_CHARGE, vector2_create(.75, .5)); + charges[2] = charge_create(-ELEMENTARY_CHARGE * 4, vector2_create(.5, .25)); + charges[3] = charge_create(ELEMENTARY_CHARGE * 5, vector2_create(.7, .75)); double dx = compute_delta_x(SCREEN_WIDTH, SCREEN_HEIGHT); gfx_clear(canvas, COLOR_BLACK); draw_charges(canvas, charges, num_charges, x0, x1, y0, y1); - for (int i = 0; i < num_points; i += 1) { - draw_field_lines(canvas, charges, num_charges, dx, vector2_create(rand_one(), rand_one()), x0, x1, y0, y1); + + // Default strategy. + // int num_points = 100; + // for (int i = 0; i < num_points; i += 1) { + // draw_field_lines(canvas, charges, num_charges, dx, vector2_create(rand_one(), rand_one()), x0, x1, y0, y1); + // } + + // Alternative strategy 1. + // for (int32_t i = 1; i < SCREEN_HEIGHT; i += 1) { + // for (int32_t j = 1; j < SCREEN_WIDTH; j += 1) { + // double x = 1.0 / (SCREEN_WIDTH * .05) * j; + // double y = 1.0 / (SCREEN_HEIGHT * .05) * i; + // draw_field_lines(canvas, charges, num_charges, dx, vector2_create(x, y), x0, x1, y0, y1); + // } + // } + + // Alternative strategy 2. + for (int32_t i = 0; i < num_charges; i += 1) { + vector2_t pos = charges[i].pos; + + double angle = 0; + while (angle < 2 * M_PI) { + angle += 2 * M_PI / 64; + vector2_t pos0 = vector2_add(pos, vector2_create(cos(angle) * 0.1, sin(angle) * 0.1)); + draw_field_lines(canvas, charges, num_charges, dx, pos0, x0, x1, y0, y1); + } } gfx_present(canvas);