From 5b006cbf7e1ad0bcf4e9ad7f91b22ac94a79a6b3 Mon Sep 17 00:00:00 2001
From: "tanguy.cavagna" <tanguy.cavagna@etu.hesge.ch>
Date: Fri, 22 Apr 2022 18:52:33 +0200
Subject: [PATCH] Added left click for + charge and right click for - charge &
 better random q

---
 charge/charge.c |  4 ++++
 charge/charge.h |  8 ++++++++
 main.c          | 11 ++++++++---
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/charge/charge.c b/charge/charge.c
index d76e454..42e91b6 100644
--- a/charge/charge.c
+++ b/charge/charge.c
@@ -69,4 +69,8 @@ bool compute_p_next(charge_t *charges, int num_charges, double eps,
 charge_t charge_create(double q, vec2 pos) {
     charge_t c = {.q = q, .pos = pos};
     return c;
+}
+
+double random_charge_q(bool positive) {
+    return rand_one() * (positive ? 1 : -1);
 }
\ No newline at end of file
diff --git a/charge/charge.h b/charge/charge.h
index ba6a607..1f83437 100644
--- a/charge/charge.h
+++ b/charge/charge.h
@@ -109,4 +109,12 @@ bool compute_p_next(charge_t *charges, int num_charges, double eps,
  */
 charge_t charge_create(double q, vec2 pos);
 
+/**
+ * @brief Return a random charge q
+ *
+ * @param positive
+ * @return double
+ */
+double random_charge_q(bool positive);
+
 #endif
\ No newline at end of file
diff --git a/main.c b/main.c
index 415e589..9373cab 100644
--- a/main.c
+++ b/main.c
@@ -84,13 +84,18 @@ void handle_mouse_input(int button, int state, int x, int y) {
     if (state == GLUT_UP)
         return;
 
-    if (button == GLUT_LEFT_BUTTON) {
+    if (button == GLUT_LEFT_BUTTON || button == GLUT_RIGHT_BUTTON) {
         charge_count += 1;
         default_charges_pos[charge_count - 1] =
             vec2_create((double)x / WINDOW_WIDTH, (double)y / WINDOW_HEIGHT);
-        default_charges[charge_count - 1] = rand_one() / (rand_one() * 10 - 5);
     }
 
+    if (button == GLUT_LEFT_BUTTON)
+        default_charges[charge_count - 1] = random_charge_q(true);
+
+    if (button == GLUT_RIGHT_BUTTON)
+        default_charges[charge_count - 1] = random_charge_q(false);
+
     glutPostRedisplay();
 }
 
@@ -106,7 +111,7 @@ int main(int argc, char **argv) {
 
     // Generate all default charges
     for (int i = 0; i < charge_count; i++) {
-        default_charges[i] = rand_one() / (rand_one() * 10 - 5);
+        default_charges[i] = random_charge_q((bool)(rand() % 2 == 0));
         default_charges_pos[i] = vec2_create(rand_one(), rand_one());
     }
 
-- 
GitLab