summaryrefslogtreecommitdiff
path: root/src/Subsampling/include/gudhi/choose_n_farthest_points.h
diff options
context:
space:
mode:
authorvrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-12-01 16:42:46 +0000
committervrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-12-01 16:42:46 +0000
commit58c77ecd1c09c1cf116be44c1a7e9d18cd99970b (patch)
tree58e0c560a96a18c2956384ab85936e70f4606a76 /src/Subsampling/include/gudhi/choose_n_farthest_points.h
parent0349fb45a621bc1af4d3505cbe7bb13ebaf89f12 (diff)
Remove traces from tangential
Tests the limits for choose_n_farthest_points and fix random git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1808 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 53eec1efbc138080d1b202c2cdd4e7ff8cdde266
Diffstat (limited to 'src/Subsampling/include/gudhi/choose_n_farthest_points.h')
-rw-r--r--src/Subsampling/include/gudhi/choose_n_farthest_points.h20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
index 40c7808d..9b45c640 100644
--- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h
+++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
@@ -60,10 +60,15 @@ void choose_n_farthest_points(Kernel const &k,
std::size_t final_size,
std::size_t starting_point,
OutputIterator output_it) {
- typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object();
-
std::size_t nb_points = boost::size(input_pts);
- assert(nb_points >= final_size);
+ if (final_size > nb_points)
+ final_size = nb_points;
+
+ // Tests to the limit
+ if (final_size < 1)
+ return;
+
+ typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object();
std::size_t current_number_of_landmarks = 0; // counter for landmarks
const double infty = std::numeric_limits<double>::infinity(); // infinity (see next entry)
@@ -107,11 +112,16 @@ void choose_n_farthest_points(Kernel const& k,
Point_container const &input_pts,
unsigned final_size,
OutputIterator output_it) {
+ // Tests to the limit
+ if ((final_size < 1) || (input_pts.size() == 0))
+ return;
+
// Choose randomly the first landmark
std::random_device rd;
std::mt19937 gen(rd());
- std::uniform_int_distribution<> dis(1, 6);
- int starting_point = dis(gen);
+ std::uniform_int_distribution<> dis(0, (input_pts.size() - 1));
+ std::size_t starting_point = dis(gen);
+
choose_n_farthest_points(k, input_pts, final_size, starting_point, output_it);
}