summaryrefslogtreecommitdiff
path: root/src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h
diff options
context:
space:
mode:
authorROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-09-22 16:43:54 +0200
committerROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-09-22 16:43:54 +0200
commite0041b766b647f3906b52f861e97edba1f089312 (patch)
tree693206fa60c757346750461922e107e5f16f5c0a /src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h
parentcba4b7047cc8665a3f20e2334358a4ca28bf021a (diff)
include what you use
Diffstat (limited to 'src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h')
-rw-r--r--src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h b/src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h
index e1bbaea3..34fc1a67 100644
--- a/src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h
+++ b/src/Coxeter_triangulation/include/gudhi/Functions/random_orthogonal_matrix.h
@@ -11,8 +11,11 @@
#ifndef FUNCTIONS_RANDOM_ORTHOGONAL_MATRIX_H_
#define FUNCTIONS_RANDOM_ORTHOGONAL_MATRIX_H_
-#include <cstdlib>
-#include <random>
+#include <cstdlib> // for std::size_t
+#include <cmath> // for std::cos, std::sin
+#include <random> // for std::uniform_real_distribution, std::random_device
+
+#include <gudhi/math.h>
#include <Eigen/Dense>
#include <Eigen/Sparse>
@@ -41,10 +44,14 @@ Eigen::MatrixXd random_orthogonal_matrix(std::size_t d) {
if (d == 1)
return Eigen::VectorXd::Constant(1, 1.0);
if (d == 2) {
- double X = 2 * 3.14159265358;
- double alpha = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/X));
+ // 0. < alpha < 2 Pi
+ std::uniform_real_distribution<double> unif(0., 2 * Gudhi::PI);
+ std::random_device rand_dev;
+ std::mt19937 rand_engine(rand_dev());
+ double alpha = unif(rand_engine);
+
Eigen::Matrix2d rot;
- rot << cos(alpha), -sin(alpha), sin(alpha), cos(alpha);
+ rot << std::cos(alpha), -std::sin(alpha), std::sin(alpha), cos(alpha);
return rot;
}
Eigen::MatrixXd low_dim_rot = random_orthogonal_matrix(d-1);