Represents a combinatorial isomorphism from one 2-manifold triangulation into another.
More...
|
| Dim2Isomorphism (unsigned sourceTriangles) |
| Creates a new isomorphism with no initialisation. More...
|
|
| Dim2Isomorphism (const Dim2Isomorphism &cloneMe) |
| Creates a new isomorphism identical to the given isomorphism. More...
|
|
unsigned | getSourceTriangles () const |
| Returns the number of triangles in the source triangulation associated with this isomorphism. More...
|
|
int & | triImage (unsigned sourceTriangle) |
| Determines the image of the given source triangle under this isomorphism. More...
|
|
int | triImage (unsigned sourceTriangle) const |
| Determines the image of the given source triangle under this isomorphism. More...
|
|
NPerm3 & | edgePerm (unsigned sourceTriangle) |
| Returns a read-write reference to the permutation that is applied to the three edges of the given source triangle under this isomorphism. More...
|
|
NPerm3 | edgePerm (unsigned sourceTriangle) const |
| Determines the permutation that is applied to the three edges of the given source triangle under this isomorphism. More...
|
|
unsigned | getSourceSimplices () const |
| Returns the number of simplices in the source triangulation associated with this isomorphism. More...
|
|
int & | simpImage (unsigned sourceSimp) |
| Determines the image of the given source simplex under this isomorphism. More...
|
|
int | simpImage (unsigned sourceSimp) const |
| Determines the image of the given source simplex under this isomorphism. More...
|
|
Perm & | facetPerm (unsigned sourceSimp) |
| Returns a read-write reference to the permutation that is applied to the (dim + 1) facets of the given source simplex under this isomorphism. More...
|
|
Perm | facetPerm (unsigned sourceSimp) const |
| Determines the permutation that is applied to the (dim + 1) facets of the given source simplex under this isomorphism. More...
|
|
NFacetSpec< dim > | operator[] (const NFacetSpec< dim > &source) const |
| Determines the image of the given source simplex facet under this isomorphism. More...
|
|
bool | isIdentity () const |
| Determines whether or not this is an identity isomorphism. More...
|
|
Triangulation * | apply (const Triangulation *original) const |
| This NGenericIsomorphism object represents a combinatorial identification from a triangulation T to a triangulation U. More...
|
|
void | applyInPlace (Triangulation *tri) const |
| Applies this isomorphism to the given triangulation, modifying the given triangulation directly. More...
|
|
void | writeTextShort (std::ostream &out) const |
| Writes this object in short text format to the given output stream. More...
|
|
void | writeTextLong (std::ostream &out) const |
| Writes this object in long text format to the given output stream. More...
|
|
|
std::string | str () const |
| Returns the output from writeTextShort() as a string. More...
|
|
std::string | toString () const |
| A deprecated alias for str(), which returns the output from writeTextShort() as a string. More...
|
|
std::string | detail () const |
| Returns the output from writeTextLong() as a string. More...
|
|
std::string | toStringLong () const |
| A deprecated alias for detail(), which returns the output from writeTextLong() as a string. More...
|
|
Represents a combinatorial isomorphism from one 2-manifold triangulation into another.
In essence, a combinatorial isomorphism from triangulation T to triangulation U is a one-to-one map from the triangles of T to the triangles of U that allows relabelling of both the triangles and their edges (or equivalently, their vertices), and that preserves gluings across adjacent triangles.
More precisely: An isomorphism consists of (i) a one-to-one map f from the triangles of T to the triangles of U, and (ii) for each triangle S of T, a permutation f_S of the edges (0,1,2) of S, for which the following condition holds:
- If edge k of triangle S and edge k' of triangle S' are identified in T, then edge f_S(k) of f(S) and edge f_S'(k') of f(S') are identified in U. Moreover, their gluing is consistent with the edge/vertex permutations; that is, there is a commutative square involving the gluing maps in T and U and the permutations f_S and f_S'.
Isomorphisms can be boundary complete or boundary incomplete. A boundary complete isomorphism satisfies the additional condition:
- If edge x is a boundary edge of T then edge f(x) is a boundary edge of U.
A boundary complete isomorphism thus indicates that a copy of triangulation T is present as an entire component (or components) of U, whereas a boundary incomplete isomorphism represents an embedding of a copy of triangulation T as a subcomplex of some possibly larger component (or components) of U.
Note that in all cases triangulation U may contain more triangles than triangulation T.
This NGenericIsomorphism object represents a combinatorial identification from a triangulation T to a triangulation U.
This routine produces the triangulation U, i.e. the range. The input parameter (original) represents the domain, T.
The given triangulation (call this T) is not modified in any way. A new triangulation (call this U) is returned, so that this isomorphism represents a one-to-one, onto and boundary complete isomorphism from T to U. That is, T and U are combinatorially identical triangulations, and this isomorphism describes the corresponding mapping between simplex and simplex facets.
The resulting triangulation U is newly created, and must be destroyed by the caller of this routine.
There are several preconditions to this routine. This routine does a small amount of sanity checking (and returns 0 if an error is detected), but it certainly does not check the entire set of preconditions. It is up to the caller of this routine to verify that all of the following preconditions are met.
- Precondition
- The number of simplices in the given triangulation is precisely the number returned by getSourceSimplices() for this isomorphism.
-
This is a valid isomorphism (i.e., it has been properly initialised, so that all simplex images are non-negative and distinct, and all facet permutations are real permutations of (0,...,dim).
-
Each simplex image for this isomorphism lies between 0 and
getSourceSimplices()-1
inclusive (i.e., this isomorphism does not represent a mapping from a smaller triangulation into a larger triangulation).
- Parameters
-
original | the triangulation to which this isomorphism should be applied. |
- Returns
- the resulting new triangulation, or 0 if a problem was encountered (i.e., an unmet precondition was noticed).
Applies this isomorphism to the given triangulation, modifying the given triangulation directly.
This is similar to apply(), except that instead of creating a new triangulation, the simplices and vertices of the given triangulation are modified directly.
See apply() for further details on how this operation is performed.
As with apply(), there are several preconditions to this routine. This routine does a small amount of sanity checking (and returns without changes if an error is detected), but it certainly does not check the entire set of preconditions. It is up to the caller of this routine to verify that all of the following preconditions are met.
- Precondition
- The number of simplices in the given triangulation is precisely the number returned by getSourceSimplices() for this isomorphism.
-
This is a valid isomorphism (i.e., it has been properly initialised, so that all simplex images are non-negative and distinct, and all facet permutations are real permutations of (0,...,dim).
-
Each simplex image for this isomorphism lies between 0 and
getSourceSimplices()-1
inclusive (i.e., this isomorphism does not represent a mapping from a smaller triangulation into a larger triangulation).
- Parameters
-
tri | the triangulation to which this isomorphism should be applied. |
Returns a random isomorphism for the given number of simplices.
This isomorphism will reorder simplices 0 to nSimplices-1
in a random fashion, and for each simplex a random permutation of its (dim + 1) vertices will be selected.
The isomorphism will be newly constructed, and must be destroyed by the caller of this routine. The new isomorphism will be of the appropriate dimension-specific subclass (e.g., NIsomorphism for dim=3, or Dim2Isomorphism for dim=2).
Note that both the STL random number generator and the standard C function rand() are used in this routine. All possible isomorphisms for the given number of simplices are equally likely.
- Parameters
-
nSimplices | the number of simplices that the new isomorphism should operate upon. |
- Returns
- the newly constructed random isomorphism.