diff options
author | skachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb> | 2016-12-16 08:24:02 +0000 |
---|---|---|
committer | skachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb> | 2016-12-16 08:24:02 +0000 |
commit | 0c26001efc086657ab46aeb2a1b7746f3e8bbfcf (patch) | |
tree | 77f1f398390212897defc4236127e6d4ad74e51b /src/Witness_complex/include/gudhi/Strong_witness_complex.h | |
parent | ea13c32806f38e1436a13425a18b93c8cfabfa69 (diff) |
Attempted to fix the bug in Strong witness complex with limited dimension
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/relaxed-witness@1891 636b058d-ea47-450e-bf9e-a15bfbe3eedb
Former-commit-id: 8dbe379ae908813ccfaeced316f5d82b6cd91360
Diffstat (limited to 'src/Witness_complex/include/gudhi/Strong_witness_complex.h')
-rw-r--r-- | src/Witness_complex/include/gudhi/Strong_witness_complex.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index 03cdbcca..3803980b 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -159,6 +159,13 @@ private: complex.insert_simplex_and_subfaces(simplex, aw_it->second - aw.begin()->second); aw_it++; } + // continue inserting limD-faces of the following simplices + typeVectorVertex& vertices = simplex; //'simplex' now will be called vertices + while (aw_it != aw.end() && aw_it->second < lim_dist2) { + add_all_faces_of_dimension(limD, vertices, vertices.begin(), aw_it, typeVectorVertex({}), complex); + vertices.push_back(aw_it->first); + aw_it++; + } if ((Landmark_id)simplex.size() - 1 > complex_dim) complex_dim = simplex.size() - 1; } @@ -166,6 +173,46 @@ private: return true; } +private: + + /* \brief Adds recursively all the faces of a certain dimension dim-1 witnessed by the same witness. + * Iterator is needed to know until how far we can take landmarks to form simplexes. + * simplex is the prefix of the simplexes to insert. + * The landmark pointed by aw_it is added to all formed simplices. + */ + template < typename SimplicialComplexForWitness > + void add_all_faces_of_dimension(int dim, + std::vector<Landmark_id>& vertices, + typename typeVectorVertex::iterator curr_it, + typename ActiveWitness::iterator aw_it, + std::vector<Landmark_id>& simplex, + SimplicialComplexForWitness& sc) + { + if (dim > 0) + while (curr_it != vertices.end()) { + simplex.push_back(curr_it->first); + typename ActiveWitness::iterator next_it = curr_it++; + add_all_faces_of_dimension(dim-1, + vertices, + next_it, + aw_it, + simplex, + sc); + simplex.pop_back(); + add_all_faces_of_dimension(dim, + vertices, + next_it, + aw_it, + simplex, + sc); + } + else if (dim == 0) { + simplex.push_back(aw_it->first); + sc.insert_simplex(simplex, aw_it->second); + simplex.pop_back(); + } + } + //@} }; |