From 5f6dabf59c090c285b4b400f18634e2507fbcd7d Mon Sep 17 00:00:00 2001
From: Irreq <irreq@protonmail.com>
Date: Wed, 24 Apr 2024 17:12:55 +0200
Subject: [PATCH] Added unit dome and updated bf runtime

---
 src/antenna.cpp | 21 ++++++++++++++++++++-
 src/antenna.h   |  4 +++-
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/antenna.cpp b/src/antenna.cpp
index fc609dd..266f707 100644
--- a/src/antenna.cpp
+++ b/src/antenna.cpp
@@ -26,7 +26,7 @@ inline float to_radians(float degree) { return degree * (M_PI / 180.0); }
  * @param antenna Antenna object
  * @return the point in 3D space of its center
  */
-inline Vector3f find_middle(const Antenna &antenna) {
+inline Position find_middle(const Antenna &antenna) {
   return antenna.points.colwise().mean();
   // return antenna.points.rowwise().mean();
 }
@@ -163,3 +163,22 @@ int main() {
   // cout << create_antenna(position, COLUMNS, ROWS, DISTANCE) << endl;
 }
 #endif
+
+MatrixXf generate_unit_dome(const int n) {
+  MatrixXf points(n, 3); // (id, X|Y|Z)
+
+  double phi, theta;
+
+  double magic = 2.0 * M_PI / 1.618033988749;
+
+  for (int i = 0; i < n; i++) {
+    phi = acos(1.0 - (double)i / double(n));
+    theta = (double)i * magic;
+
+    points(i, X_INDEX) = (float)(cos(theta) * sin(phi));
+    points(i, Y_INDEX) = (float)(sin(theta) * sin(phi));
+    points(i, Z_INDEX) = (float)(cos(phi));
+  }
+
+  return points;
+}
diff --git a/src/antenna.h b/src/antenna.h
index dd15421..12c3136 100644
--- a/src/antenna.h
+++ b/src/antenna.h
@@ -34,7 +34,7 @@ VectorXf compute_delays(const MatrixXf &antenna);
 /**
  * Find the center of antenna
  */
-Vector3f find_middle(const Antenna &antenna);
+Position find_middle(const Antenna &antenna);
 
 /**
  * Place the antenna by positioning the center @ new position
@@ -88,4 +88,6 @@ VectorXf steering_vector(const Antenna &antenna, float phi, float theta);
  */
 VectorXf steering_vector(const Antenna &antenna, const Position point);
 
+MatrixXf generate_unit_dome(const int n);
+
 #endif
-- 
GitLab