From 15703cd2c555196d6d87d41f4e53c6ec3f902440 Mon Sep 17 00:00:00 2001
From: Florian Burgener <florian.brgnr@gmail.com>
Date: Wed, 13 Apr 2022 21:07:37 +0200
Subject: [PATCH] Add different strategies to create the pos0 for drawing the
 field line

---
 src/main.c | 36 +++++++++++++++++++++++++++++++-----
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/main.c b/src/main.c
index 7fc6b8b..e612492 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);
-- 
GitLab