diff options
Diffstat (limited to 'example/Witness_complex/generators.h')
-rw-r--r-- | example/Witness_complex/generators.h | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/example/Witness_complex/generators.h b/example/Witness_complex/generators.h deleted file mode 100644 index 4b755daa..00000000 --- a/example/Witness_complex/generators.h +++ /dev/null @@ -1,166 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Author(s): Siargey Kachanovich - * - * Copyright (C) 2015 Inria - * - * 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/>. - */ - -#ifndef GENERATORS_H_ -#define GENERATORS_H_ - -#include <CGAL/Epick_d.h> -#include <CGAL/point_generators_d.h> -#include <CGAL/Random.h> - -#include <fstream> -#include <string> -#include <vector> -#include <cmath> - -using K = CGAL::Epick_d<CGAL::Dynamic_dimension_tag>; -using FT = K::FT; -using Point_d = K::Point_d; -using Point_Vector = std::vector<Point_d>; -using Random_cube_iterator = CGAL::Random_points_in_cube_d<Point_d>; -using Random_point_iterator = CGAL::Random_points_in_ball_d<Point_d>; - -/** - * \brief Rock age method of reading off file - * - */ -inline void -off_reader_cust(std::string file_name, std::vector<Point_d> & points) { - std::ifstream in_file(file_name.c_str(), std::ios::in); - if (!in_file.is_open()) { - std::cerr << "Unable to open file " << file_name << std::endl; - return; - } - std::string line; - double x; - // Line OFF. No need in it - if (!getline(in_file, line)) { - std::cerr << "No line OFF\n"; - return; - } - // Line with 3 numbers. No need - if (!getline(in_file, line)) { - std::cerr << "No line with 3 numbers\n"; - return; - } - // Reading points - while (getline(in_file, line)) { - std::vector< double > point; - std::istringstream iss(line); - while (iss >> x) { - point.push_back(x); - } - points.push_back(Point_d(point)); - } - in_file.close(); -} - -/** - * \brief Customized version of read_points - * which takes into account a possible nbP first line - * - */ -inline void -read_points_cust(std::string file_name, Point_Vector & points) { - std::ifstream in_file(file_name.c_str(), std::ios::in); - if (!in_file.is_open()) { - std::cerr << "Unable to open file " << file_name << std::endl; - return; - } - std::string line; - double x; - while (getline(in_file, line)) { - std::vector< double > point; - std::istringstream iss(line); - while (iss >> x) { - point.push_back(x); - } - Point_d p(point.begin(), point.end()); - if (point.size() != 1) - points.push_back(p); - } - in_file.close(); -} - -/** \brief Generate points on a grid in a cube of side 2 - * having {+-1}^D as vertices and insert them in W. - * The grid has "width" points on each side. - * If torus is true then it is supposed that the cube represents - * a flat torus, hence the opposite borders are associated. - * The points on border in this case are not placed twice. - */ -void generate_points_grid(Point_Vector& W, int width, int D, bool torus) { - int nb_points = 1; - for (int i = 0; i < D; ++i) - nb_points *= width; - for (int i = 0; i < nb_points; ++i) { - std::vector<double> point; - int cell_i = i; - for (int l = 0; l < D; ++l) { - if (torus) - point.push_back(-1 + (2.0 / (width - 1))*(cell_i % width)); - else - point.push_back(-1 + (2.0 / width)*(cell_i % width)); - // attention: the bottom and the right are covered too! - cell_i /= width; - } - W.push_back(point); - } -} - -/** \brief Generate nbP points uniformly in a cube of side 2 - * having {+-1}^dim as its vertices and insert them in W. - */ -void generate_points_random_box(Point_Vector& W, int nbP, int dim) { - Random_cube_iterator rp(dim, 1.0); - for (int i = 0; i < nbP; i++) { - W.push_back(*rp++); - } -} - -/** \brief Generate nbP points uniformly on a (dim-1)-sphere - * and insert them in W. - */ -void generate_points_sphere(Point_Vector& W, int nbP, int dim) { - CGAL::Random_points_on_sphere_d<Point_d> rp(dim, 1); - for (int i = 0; i < nbP; i++) - W.push_back(*rp++); -} - -/** \brief Generate nbP points on a (flat) d-torus embedded in R^{2d} - * - */ -void generate_points_torus(Point_Vector& W, int nbP, int dim) { - CGAL::Random rand; - const double pi = std::acos(-1); - for (int i = 0; i < nbP; i++) { - std::vector<FT> point; - for (int j = 0; j < dim; j++) { - double alpha = rand.uniform_real(static_cast<double>(0), 2*pi); - point.push_back(sin(alpha)); - point.push_back(cos(alpha)); - } - W.push_back(Point_d(point)); - } -} - -#endif // GENERATORS_H_ |