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