summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorVincent Rouvreau <10407034+VincentRouvreau@users.noreply.github.com>2021-11-02 16:47:39 +0100
committerGitHub <noreply@github.com>2021-11-02 16:47:39 +0100
commit58c09b0547749604260ea2584b4d2a3a9ea9735b (patch)
treea499da7f859ffcec0dc88e5d0a589b9ae5aab9d1 /src/common
parentdc4f34632e2532ae8aa5a9efa50c428369a94965 (diff)
parent93df8a0622836ab03ada2eac075132388708d2c4 (diff)
Merge pull request #490 from Hind-M/generate_points_torus_python
First version of points generation on torus
Diffstat (limited to 'src/common')
-rw-r--r--src/common/include/gudhi/random_point_generators.h12
-rw-r--r--src/common/utilities/off_file_from_shape_generator.cpp2
2 files changed, 7 insertions, 7 deletions
diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h
index 33fb182d..25a7392d 100644
--- a/src/common/include/gudhi/random_point_generators.h
+++ b/src/common/include/gudhi/random_point_generators.h
@@ -185,7 +185,7 @@ std::vector<typename Kernel::Point_d> generate_points_on_torus_3D(std::size_t nu
// "Private" function used by generate_points_on_torus_d
template <typename Kernel, typename OutputIterator>
-static void generate_uniform_points_on_torus_d(const Kernel &k, int dim, std::size_t num_slices,
+static void generate_grid_points_on_torus_d(const Kernel &k, int dim, std::size_t num_slices,
OutputIterator out,
double radius_noise_percentage = 0.,
std::vector<typename Kernel::FT> current_point =
@@ -208,14 +208,14 @@ static void generate_uniform_points_on_torus_d(const Kernel &k, int dim, std::si
double alpha = two_pi * slice_idx / num_slices;
cp2.push_back(radius_noise_ratio * std::cos(alpha));
cp2.push_back(radius_noise_ratio * std::sin(alpha));
- generate_uniform_points_on_torus_d(
+ generate_grid_points_on_torus_d(
k, dim, num_slices, out, radius_noise_percentage, cp2);
}
}
}
template <typename Kernel>
-std::vector<typename Kernel::Point_d> generate_points_on_torus_d(std::size_t num_points, int dim, bool uniform = false,
+std::vector<typename Kernel::Point_d> generate_points_on_torus_d(std::size_t num_points, int dim, std::string sample = "random",
double radius_noise_percentage = 0.) {
using namespace boost::math::double_constants;
@@ -226,9 +226,9 @@ std::vector<typename Kernel::Point_d> generate_points_on_torus_d(std::size_t num
std::vector<Point> points;
points.reserve(num_points);
- if (uniform) {
- std::size_t num_slices = (std::size_t)std::pow(num_points, 1. / dim);
- generate_uniform_points_on_torus_d(
+ if (sample == "grid") {
+ std::size_t num_slices = (std::size_t)std::pow(num_points + .5, 1. / dim); // add .5 to avoid rounding down with numerical approximations
+ generate_grid_points_on_torus_d(
k, dim, num_slices, std::back_inserter(points), radius_noise_percentage);
} else {
for (std::size_t i = 0; i < num_points;) {
diff --git a/src/common/utilities/off_file_from_shape_generator.cpp b/src/common/utilities/off_file_from_shape_generator.cpp
index 6efef4fc..71ede434 100644
--- a/src/common/utilities/off_file_from_shape_generator.cpp
+++ b/src/common/utilities/off_file_from_shape_generator.cpp
@@ -135,7 +135,7 @@ int main(int argc, char **argv) {
if (dimension == 3)
points = Gudhi::generate_points_on_torus_3D<K>(points_number, dimension, radius, radius/2.);
else
- points = Gudhi::generate_points_on_torus_d<K>(points_number, dimension, true);
+ points = Gudhi::generate_points_on_torus_d<K>(points_number, dimension, "grid");
break;
case Data_shape::klein:
switch (dimension) {