Skip to content

Commit

Permalink
Adding directions_2d and directions_3d
Browse files Browse the repository at this point in the history
  • Loading branch information
Gregwar committed Oct 7, 2024
1 parent 314b24e commit daae646
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ add_library(libplaco SHARED
src/placo/tools/prioritized.cpp
src/placo/tools/cubic_spline.cpp
src/placo/tools/cubic_spline_3d.cpp
src/placo/tools/directions.cpp

# Problem formulation
src/placo/problem/problem.cpp
Expand Down
4 changes: 4 additions & 0 deletions bindings/expose-tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "placo/tools/cubic_spline_3d.h"
#include "placo/tools/axises_mask.h"
#include "placo/tools/prioritized.h"
#include "placo/tools/directions.h"
#include "expose-utils.hpp"
#ifdef HAVE_RHOBAN_UTILS
#include "rhoban_utils/history/history.h"
Expand All @@ -24,6 +25,7 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(loadReplays_overloads, loadReplays, 1, 2)

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(set_axises_overloads, set_axises, 1, 2);
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(configure_overloads, configure, 2, 3);
BOOST_PYTHON_FUNCTION_OVERLOADS(directions_3d_overloads, directions_3d, 1, 2);

void exposeTools()
{
Expand All @@ -33,6 +35,8 @@ void exposeTools()
def("frame_yaw", &frame_yaw);
def("flatten_on_floor", &flatten_on_floor);
def("optimal_transformation", &optimal_transformation);
def("directions_2d", &directions_2d);
def("directions_3d", &directions_3d, directions_3d_overloads());

exposeStdVector<int>("vector_int");
exposeStdVector<double>("vector_double");
Expand Down
42 changes: 42 additions & 0 deletions src/placo/tools/directions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include "directions.h"

namespace placo::tools
{
Eigen::MatrixXd directions_2d(int n)
{
Eigen::MatrixXd directions(n, 2);

for (int i = 0; i < n; i++)
{
double angle = 2 * M_PI * i / n;
directions(i, 0) = cos(angle);
directions(i, 1) = sin(angle);
}

return directions;
}

Eigen::MatrixXd directions_3d(int n, double epsilon)
{
Eigen::MatrixXd directions(n, 3);

// Golden ratio
double phi = (1 + sqrt(5)) / 2;

for (int i = 0; i < n; i++)
{
double x = fmod(i / phi, 1);
double y = (i + epsilon) / (n - 1 + 2 * epsilon);

double alpha = 2 * M_PI * x;
double beta = acos(1 - 2 * y);

directions(i, 0) = sin(beta) * cos(alpha);
directions(i, 1) = sin(beta) * sin(alpha);
directions(i, 2) = cos(beta);
}

return directions;
}

} // namespace placo::tools
22 changes: 22 additions & 0 deletions src/placo/tools/directions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#include <vector>
#include <Eigen/Dense>

namespace placo::tools
{
/**
* @brief Generates a set of directions in 2D
* @param n the number of directions
* @return matrix of size n x 2
*/
Eigen::MatrixXd directions_2d(int n);

/**
* @brief Generates a set of directions in 3D, using Fibonacci lattice
* @param n the number of directions
* @param epsilon the epsilon parameter for the Fibonacci lattice
* @return matrix of size n x 3
*/
Eigen::MatrixXd directions_3d(int n, double epsilon = 0.5);
} // namespace placo::tools

0 comments on commit daae646

Please sign in to comment.