diff options
author | Gard Spreemann <gspr@nonempty.org> | 2019-09-25 14:29:41 +0200 |
---|---|---|
committer | Gard Spreemann <gspr@nonempty.org> | 2019-09-25 14:29:41 +0200 |
commit | 599d68cd916f533bdb66dd9e684dd5703233b6bb (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /GudhUI/utils/Is_manifold.h | |
parent | a2e642954ae39025e041471d486ecbac25dff440 (diff) |
Delete all files in order to incorporate upstream's move to git.
Diffstat (limited to 'GudhUI/utils/Is_manifold.h')
-rw-r--r-- | GudhUI/utils/Is_manifold.h | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/GudhUI/utils/Is_manifold.h b/GudhUI/utils/Is_manifold.h deleted file mode 100644 index 732df607..00000000 --- a/GudhUI/utils/Is_manifold.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Is_manifold.h - * Created on: Jan 28, 2015 - * 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): David Salinas - * - * Copyright (C) 2014 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 UTILS_IS_MANIFOLD_H_ -#define UTILS_IS_MANIFOLD_H_ - -#include "utils/UI_utils.h" -#include "utils/Edge_contractor.h" - -/** - * Iteratively tries to anticollapse smallest edge non added so far. - * If its link is contractible then no topological change and else possible topological change. - * - * todo do a sparsification with some parameter eps while growing - */ -template<typename SkBlComplex> class Is_manifold { - private: - const SkBlComplex& input_complex_; - typedef typename SkBlComplex::Vertex_handle Vertex_handle; - - public: - /* - * return dim the maximum dimension around one simplex and res which is true if the complex is a manifold. - * If the complex has dimension <= 3 then if res is false, the complex is not a manifold. - * For d-manifold with d>=4, res may be false while the complex is a manifold. - */ - Is_manifold(const SkBlComplex& input_complex, unsigned& dim, bool & res) : input_complex_(input_complex) { - res = true; - dim = -1; - if (!input_complex_.empty()) { - for (auto v : input_complex_.vertex_range()) { - dim = local_dimension(v); - break; - } - // check that the link of every vertex is a dim-1 sphere - for (auto v : input_complex_.vertex_range()) { - if (!is_k_sphere(v, dim - 1)) { - res = false; - break; - } - } - } - } - - private: - unsigned local_dimension(Vertex_handle v) { - unsigned dim = 0; - for (const auto& s : input_complex_.star_simplex_range(v)) - dim = (std::max)(dim, (unsigned) s.dimension()); - return dim; - } - - bool is_k_sphere(Vertex_handle v, int k) { - auto link = input_complex_.link(v); - Edge_contractor<Complex> contractor(link, link.num_vertices() - 1); - (void)contractor; - return (is_sphere_simplex(link) == k); - } - - // A minimal sphere is a complex that contains vertices v1...vn and all faces - // made upon this set except the face {v1,...,vn} - // return -2 if not a minimal sphere - // and d otherwise if complex is a d minimal sphere - - template<typename SubComplex> - int is_sphere_simplex(const SubComplex& complex) { - if (complex.empty()) return -1; - if (complex.num_blockers() != 1) return -2; - - // necessary and sufficient condition : there exists a unique blocker that passes through all vertices - auto first_blocker = *(complex.const_blocker_range().begin()); - - if (first_blocker->dimension() + 1 != complex.num_vertices()) - return -2; - else - return (first_blocker->dimension() - 1); - } -}; - -#endif // UTILS_IS_MANIFOLD_H_ |