diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Bottleneck_distance/concept/Persistence_diagram.h | 3 | ||||
-rw-r--r-- | src/Bottleneck_distance/example/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/Bottleneck_distance/example/bottleneck_basic_example.cpp | 48 | ||||
-rw-r--r-- | src/Bottleneck_distance/example/bottleneck_read_file_example.cpp (renamed from src/Bottleneck_distance/example/bottleneck_example.cpp) | 2 | ||||
-rw-r--r-- | src/Bottleneck_distance/include/gudhi/Persistence_graph.h | 5 | ||||
-rw-r--r-- | src/Bottleneck_distance/test/bottleneck_unit_test.cpp | 4 |
6 files changed, 58 insertions, 7 deletions
diff --git a/src/Bottleneck_distance/concept/Persistence_diagram.h b/src/Bottleneck_distance/concept/Persistence_diagram.h index 2ca10094..d55f5573 100644 --- a/src/Bottleneck_distance/concept/Persistence_diagram.h +++ b/src/Bottleneck_distance/concept/Persistence_diagram.h @@ -27,7 +27,8 @@ namespace Gudhi { namespace bottleneck_distance { -/** \brief Concept of persistence diagram point. get<0>() must return the birth of the component and get<1>() its death. +/** \brief Concept of Diagram_point. get<0>() must return the birth of the corresponding component and get<1>() its death. + * If the component stay alive, get<1>() must return std::numeric_limits<double>::infinity(). * * \ingroup bottleneck_distance */ diff --git a/src/Bottleneck_distance/example/CMakeLists.txt b/src/Bottleneck_distance/example/CMakeLists.txt index 6f3204f6..cd53ccfc 100644 --- a/src/Bottleneck_distance/example/CMakeLists.txt +++ b/src/Bottleneck_distance/example/CMakeLists.txt @@ -6,7 +6,8 @@ project(Bottleneck_distance_examples) if(CGAL_FOUND) if (NOT CGAL_VERSION VERSION_LESS 4.8.0) if (EIGEN3_FOUND) - add_executable (bottleneck_example bottleneck_example.cpp) + add_executable (bottleneck_read_file_example bottleneck_read_file_example.cpp) + add_executable (bottleneck_basic_example bottleneck_basic_example.cpp) endif() endif () endif() diff --git a/src/Bottleneck_distance/example/bottleneck_basic_example.cpp b/src/Bottleneck_distance/example/bottleneck_basic_example.cpp new file mode 100644 index 00000000..95548579 --- /dev/null +++ b/src/Bottleneck_distance/example/bottleneck_basic_example.cpp @@ -0,0 +1,48 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Authors: Francois Godi, small modifications by Pawel Dlotko + * + * Copyright (C) 2015 INRIA (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <gudhi/Bottleneck.h> +#include <iostream> + +int main() { + + std::vector< std::pair<double, double> > v1, v2; + + v1.emplace_back(2.7, 3.7); + v1.emplace_back(9.6, 14.); + v1.emplace_back(34.2, 34.974); + v1.emplace_back(3., std::numeric_limits<double>::infinity()); + + v2.emplace_back(2.8, 4.45); + v2.emplace_back(9.5, 14.1); + v2.emplace_back(3.2, std::numeric_limits<double>::infinity()); + + + double b = Gudhi::bottleneck_distance::compute(v1, v2); + + std::cout << "Bottleneck distance = " << b << std::endl; + + b = Gudhi::bottleneck_distance::compute(v1, v2, 0.1); + + std::cout << "Approx bottleneck distance = " << b << std::endl; + +} diff --git a/src/Bottleneck_distance/example/bottleneck_example.cpp b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp index 28e458a5..4a503e4c 100644 --- a/src/Bottleneck_distance/example/bottleneck_example.cpp +++ b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp @@ -67,7 +67,7 @@ int main( int argc , char** argv ) } std::vector< std::pair< double , double > > diag1 = read_diagram_from_file( argv[1] ); std::vector< std::pair< double , double > > diag2 = read_diagram_from_file( argv[2] ); - double tolerance = 0; + double tolerance = 0.; if ( argc == 4 ) { tolerance = atof( argv[3] ); diff --git a/src/Bottleneck_distance/include/gudhi/Persistence_graph.h b/src/Bottleneck_distance/include/gudhi/Persistence_graph.h index a4ea6968..506dba52 100644 --- a/src/Bottleneck_distance/include/gudhi/Persistence_graph.h +++ b/src/Bottleneck_distance/include/gudhi/Persistence_graph.h @@ -74,10 +74,10 @@ Persistence_graph::Persistence_graph(const Persistence_diagram1 &diag1, : u(), v() { for (auto it = diag1.cbegin(); it != diag1.cend(); ++it) - if (it->second - it->first > e) + if (it->second != std::numeric_limits<double>::infinity() && it->second - it->first > e) u.push_back(Internal_point(std::get<0>(*it), std::get<1>(*it), u.size())); for (auto it = diag2.cbegin(); it != diag2.cend(); ++it) - if (it->second - it->first > e) + if (it->second != std::numeric_limits<double>::infinity() && it->second - it->first > e) v.push_back(Internal_point(std::get<0>(*it), std::get<1>(*it), v.size())); if (u.size() < v.size()) swap(u, v); @@ -120,6 +120,7 @@ inline std::vector<double> Persistence_graph::sorted_distances() const { for (int u_point_index = 0; u_point_index < size(); ++u_point_index) for (int v_point_index = 0; v_point_index < size(); ++v_point_index) sorted_distances.emplace(distance(u_point_index, v_point_index)); + sorted_distances.emplace(std::numeric_limits<double>::infinity()); return std::vector<double>(sorted_distances.begin(),sorted_distances.end()); } diff --git a/src/Bottleneck_distance/test/bottleneck_unit_test.cpp b/src/Bottleneck_distance/test/bottleneck_unit_test.cpp index 2237b073..84101274 100644 --- a/src/Bottleneck_distance/test/bottleneck_unit_test.cpp +++ b/src/Bottleneck_distance/test/bottleneck_unit_test.cpp @@ -39,7 +39,7 @@ std::uniform_real_distribution<double> unif(0.,upper_bound); std::default_random_engine re; std::vector< std::pair<double, double> > v1, v2; -BOOST_AUTO_TEST_CASE(persistence_diagrams_graph){ +BOOST_AUTO_TEST_CASE(persistence_graph){ // Random construction for (int i = 0; i < n1; i++) { double a = unif(re); @@ -70,7 +70,7 @@ BOOST_AUTO_TEST_CASE(persistence_diagrams_graph){ // BOOST_CHECK(g.size()==(n1+n2)); // - BOOST_CHECK((int) d.size() <= (n1+n2)*(n1+n2) - n1*n2 + 1); + BOOST_CHECK((int) d.size() <= (n1+n2)*(n1+n2) - n1*n2 + 2); BOOST_CHECK(std::count(d.begin(), d.end(), g.distance(0,0))==1); BOOST_CHECK(std::count(d.begin(), d.end(), g.distance(0,n1-1))==1); BOOST_CHECK(std::count(d.begin(), d.end(), g.distance(0,n1))==1); |