# HG changeset patch # User Dmitriy Morozov <dmitriy@mrzv.org> # Date 1367040718 25200 # Node ID 815d6a978c6c90a86881549095029976638a3e7d # Parent 29306411272b1d1478df6623f2d84c7aadd96dc5 Added standalone bottleneck-distance.cpp diff -r 29306411272b -r 815d6a978c6c examples/CMakeLists.txt --- a/examples/CMakeLists.txt Thu Feb 28 11:12:02 2013 +0800 +++ b/examples/CMakeLists.txt Fri Apr 26 22:31:58 2013 -0700 @@ -1,3 +1,6 @@ +add_executable (bottleneck-distance bottleneck-distance.cpp) +target_link_libraries (bottleneck-distance ${libraries} ${Boost_PROGRAM_OPTIONS_LIBRARY}) + add_subdirectory (alphashapes) #add_subdirectory (ar-vineyard) add_subdirectory (cech-complex) diff -r 29306411272b -r 815d6a978c6c examples/bottleneck-distance.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/bottleneck-distance.cpp Fri Apr 26 22:31:58 2013 -0700 @@ -0,0 +1,67 @@ +#include <utilities/types.h> +#include <topology/persistence-diagram.h> + +#include <string> +#include <iostream> +#include <fstream> +#include <sstream> +#include <boost/archive/binary_iarchive.hpp> +#include <boost/serialization/map.hpp> + +#include <boost/program_options.hpp> + + +typedef PersistenceDiagram<> PDgm; + +namespace po = boost::program_options; + + +void read_diagram(PDgm& dgm, const std::string& filename) +{ + std::ifstream in(filename.c_str()); + std::string line; + std::getline(in, line); + while (in) + { + std::istringstream sin(line); + double x,y; + sin >> x >> y; + dgm.push_back(PDgm::Point(x,y)); + std::getline(in, line); + } +} + +int main(int argc, char* argv[]) +{ + std::string filename1, filename2; + + po::options_description hidden("Hidden options"); + hidden.add_options() + ("input-file1", po::value<std::string>(&filename1), "The first collection of persistence diagrams") + ("input-file2", po::value<std::string>(&filename2), "The second collection of persistence diagrams"); + + po::positional_options_description p; + p.add("input-file1", 1); + p.add("input-file2", 2); + + po::options_description all; all.add(hidden); + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(all).positional(p).run(), vm); + po::notify(vm); + + if (!vm.count("input-file1") || !vm.count("input-file2")) + { + std::cout << "Usage: " << argv[0] << " input-file1 input-file2" << std::endl; + return 1; + } + + PDgm dgm1, dgm2; + read_diagram(dgm1, filename1); + read_diagram(dgm2, filename2); + std::cout << "Size dgm1: " << dgm1.size() << std::endl; + std::cout << "Size dgm2: " << dgm2.size() << std::endl; + + std::cout << "Distance: " << bottleneck_distance(dgm1, dgm2) << std::endl; +}