Regina 7.3 Calculation Engine
|
One of a family of thin T x I
triangulations that typically appear at the centres of layered torus bundles.
More...
#include <subcomplex/txicore.h>
Public Member Functions | |
TxIDiagonalCore (size_t size, size_t k) | |
Creates a new T x I triangulation with the given parameters. More... | |
TxIDiagonalCore (const TxIDiagonalCore &)=default | |
Creates a new copy of the given T x I triangulation. More... | |
TxIDiagonalCore (TxIDiagonalCore &&) noexcept=default | |
Moves the contents of the given T x I triangulation into this new triangulation. More... | |
TxIDiagonalCore & | operator= (const TxIDiagonalCore &src)=default |
Sets this to be a copy of the given T x I triangulation. More... | |
TxIDiagonalCore & | operator= (TxIDiagonalCore &&src) noexcept=default |
Moves the contents of the given T x I triangulation into this triangulation. More... | |
size_t | size () const |
Returns the total number of tetrahedra in this T x I triangulation. More... | |
size_t | k () const |
Returns the additional parameter k as described in the class notes. More... | |
void | swap (TxIDiagonalCore &other) noexcept |
Swaps the contents of this and the given T x I triangulation. More... | |
bool | operator== (const TxICore &other) const override |
Determines if this and the given T x I triangulation are of the same type and have the same parameters. More... | |
std::ostream & | writeName (std::ostream &out) const override |
Writes the name of this specific triangulation of T x I to the given output stream. More... | |
std::ostream & | writeTeXName (std::ostream &out) const override |
Writes the name of this specific triangulation of T x I in TeX format to the given output stream. More... | |
const Triangulation< 3 > & | core () const |
Returns a full copy of the T x I triangulation that this object describes. More... | |
size_t | bdryTet (int whichBdry, int whichTri) const |
Determines which tetrahedron provides the requested boundary triangle. More... | |
Perm< 4 > | bdryRoles (int whichBdry, int whichTri) const |
Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles. More... | |
const Matrix2 & | bdryReln (int whichBdry) const |
Returns a 2-by-2 matrix describing the α and β curves on a torus boundary in terms of specific tetrahedron edges. More... | |
const Matrix2 & | parallelReln () const |
Returns a 2-by-2 matrix describing the parallel relationship between the upper and lower boundary curves. More... | |
std::string | name () const |
Returns the name of this specific triangulation of T x I as a human-readable string. More... | |
std::string | texName () const |
Returns the name of this specific triangulation of T x I in TeX format. More... | |
bool | operator!= (const TxICore &other) const |
Determines if this and the given T x I triangulation are of different types and/or have different parameters. More... | |
void | writeTextShort (std::ostream &out) const |
Writes a short text representation of this object to the given output stream. More... | |
void | writeTextLong (std::ostream &out) const |
Writes a detailed text representation of this object to the given output stream. More... | |
std::string | str () const |
Returns a short text representation of this object. More... | |
std::string | utf8 () const |
Returns a short text representation of this object using unicode characters. More... | |
std::string | detail () const |
Returns a detailed text representation of this object. More... | |
Protected Member Functions | |
void | swapBaseData (TxICore &other) noexcept |
Swaps all data that is managed by this base class with the given triangulation. More... | |
Protected Attributes | |
Triangulation< 3 > | core_ |
A full copy of the T x I triangulation that is described. More... | |
std::array< std::array< size_t, 2 >, 2 > | bdryTet_ |
The tetrahedra that provide the upper and lower boundary triangles. More... | |
std::array< std::array< Perm< 4 >, 2 >, 2 > | bdryRoles_ |
Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles. More... | |
std::array< Matrix2, 2 > | bdryReln_ |
Expresses the α and β curves for each torus boundary in terms of specific tetrahedron edges and vertices. More... | |
Matrix2 | parallelReln_ |
Expresses the lower α and β curves in terms of the upper α and β curves. More... | |
One of a family of thin T x I
triangulations that typically appear at the centres of layered torus bundles.
Different triangulations in this family use different numbers of tetrahedra, with the larger triangulations producing more complicated relationships between the upper and lower boundary curves.
Members of this family are parameterised by their size (the number of tetrahedra) and an additional integer k, where 1 ≤ k ≤ size - 5. Note that this means we must have size ≥ 6. The member of this family of size n with additional parameter k is labelled T_n:k
.
It is worth noting that T_n:k
is isomorphic to T_n:(n-4-k)
, so in reality there are only [(n-4)/2] different triangulations for a given size (rounded down).
A triangulation of this family is most easily defined in terms of its central torus. Central surfaces are described in detail in "Structures of small closed non-orientable 3-manifold triangulations", Benjamin A. Burton, J. Knot Theory Ramifications 16 (2007), 545–574; in particular, see the section on thin I-bundles.
The central torus begins with two triangles u0 and u1 (which eventually provide the upper torus boundary), with a chain of quadrilaterals q1, ..., q(n-5) descending diagonally beneath them as illustrated in the diagram below.
We then distort quadrilateral qk and attach two more triangles w0 and w1 to its side (these will eventually provide the lower torus boundary). This is illustrated in the following diagram.
The entire central torus wraps from left to right (so the lower left edges of most quadrilaterals qi are identified with the upper right edges of q(i-1), and the left edge of qk is identified with the right edge of w1). As an exception, the two uppermost edges are identified with the two lowermost edges in a parallel fashion (so the upper left edge of u1 is identified with the lower right edge of q1, and the adjacent edges at right angles to these are also identified).
The four triangles in the central torus correspond to the four tetrahedra in the triangulation that provide the boundary triangles. The upper boundary is coned out from triangles u0 and u1, and the lower boundary is coned out from triangles w0 and w1. In each boundary, u0 or w0 gives the first boundary triangle and u1 or w1 gives the second. The directions of the corresponding α and β curves are illustrated below.
As a final illustration, the example below shows the central surface in the case (n, k) = (9, 2).
This class implements C++ move semantics and adheres to the C++ Swappable requirement. It is designed to avoid deep copies wherever possible, even when passing or returning objects by value.
regina::TxIDiagonalCore::TxIDiagonalCore | ( | size_t | size, |
size_t | k | ||
) |
Creates a new T x I
triangulation with the given parameters.
size | the number of tetrahedra in this triangulation. This must be at least 6. |
k | the additional parameter k as described in the class notes. This must be between 1 and (size - 5) inclusive. |
|
default |
Creates a new copy of the given T x I
triangulation.
|
defaultnoexcept |
Moves the contents of the given T x I
triangulation into this new triangulation.
The triangulation that was passed will no longer be usable.
|
inlineinherited |
Returns a 2-by-2 matrix describing the α and β curves on a torus boundary in terms of specific tetrahedron edges.
Consider the first triangle of the given boundary. Let t be the tetrahedron returned by bdryTet(whichBdry, 0) and let p be the permutation returned by bdryRoles(whichBdry, 0).
Let edge01 be the directed edge from vertex p[0] to p[1] of tetrahedron t, and let edge02 be the directed edge from vertex p[0] to p[2] of tetrahedron t. Then the matrix returned by this routine describes how the directed edges edge01 and edge02 relate to the α and β curves on the given boundary. Specifically:
[ α ] [ edge01 ] [ ] = bdryReln() * [ ] . [ β ] [ edge02 ]
It is guaranteed that this matrix has determinant +1 or -1.
whichBdry | 0 if the upper boundary should be examined, or 1 if the lower boundary should be examined. |
|
inlineinherited |
Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles.
Each boundary torus contains two triangles, whose vertices can be numbered 0, 1 and 2 according to the following diagram. This diagram is completely symmetric, in that edges 1-2 are no more special than edges 0-2 or 0-1. The important observations are that edges 1-2 and 2-1 of each triangle are identified, edges 0-2 and 2-0 of each triangle are identified and edges 0-1 and 1-0 of each triangle are identified.
*--->>--* |0 2 / | First | / 1| Second triangle v / v triangle |1 / | | / 2 0| *--->>--*
This routine returns a permutation that maps these integers 0,1,2 to real tetrahedron vertices. Let t be the tetrahedron returned by bdryTet(whichBdry, whichTri) and let p be the permutation returned by bdryRoles(whichBdry, whichTri). Then vertices p[0], p[1] and p[2] of tetrahedron t correspond to the markings 0, 1 and 2 respectively in the diagram above (and therefore the boundary triangle is face p[3] of the tetrahedron).
The arguments to this routine affect whether we examine the upper or lower boundary and whether we examine the first or second triangle of this boundary
whichBdry | 0 if the upper boundary should be examined, or 1 if the lower boundary should be examined. |
whichTri | 0 if the first boundary triangle should be examined, or 1 if the second boundary triangle should be examined. |
|
inlineinherited |
Determines which tetrahedron provides the requested boundary triangle.
Recall that the T x I
triangulation has two torus boundaries, each consisting of two boundary triangles. This routine returns the specific tetrahedron that provides the given triangle of the given torus boundary.
What is returned is the index number of the tetrahedron within the triangulation. To access the tetrahedron itself, you may call core().tetrahedron(bdryTet(...))
.
Note that the same tetrahedron may provide more than one boundary triangle.
whichBdry | 0 if the upper boundary should be examined, or 1 if the lower boundary should be examined. |
whichTri | 0 if the first boundary triangle should be examined, or 1 if the second boundary triangle should be examined. |
|
inlineinherited |
Returns a full copy of the T x I
triangulation that this object describes.
Successive calls to this routine will return a reference to the same triangulation (i.e., it is not recreated each time this function is called).
|
inherited |
Returns a detailed text representation of this object.
This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.
|
inline |
Returns the additional parameter k as described in the class notes.
|
inherited |
Returns the name of this specific triangulation of T x I
as a human-readable string.
|
inlineinherited |
Determines if this and the given T x I
triangulation are of different types and/or have different parameters.
If this returns false
(i.e., both objects compare as equal), then the triangulations returned by core() should also be combinatorially identical.
other | the T x I triangulation to compare with this. |
true
if and only if this and the given triangulation are of different types and/or have different parameters.
|
default |
Sets this to be a copy of the given T x I
triangulation.
This will induce a deep copy.
|
defaultnoexcept |
Moves the contents of the given T x I
triangulation into this triangulation.
The triangulation that was passed will no longer be usable.
|
inlineoverridevirtual |
Determines if this and the given T x I
triangulation are of the same type and have the same parameters.
If this returns true
, then the triangulations returned by core() should also be combinatorially identical.
other | the T x I triangulation to compare with this. |
true
if and only if this and the given triangulation are of the same type and have the same parameters. Implements regina::TxICore.
|
inlineinherited |
Returns a 2-by-2 matrix describing the parallel relationship between the upper and lower boundary curves.
Let a_u and b_u be the upper α and β boundary curves. Suppose that the lower α is parallel to w.a_u + x.b_u, and that the lower β is parallel to y.a_u + z.b_u. Then the matrix returned will be
[ w x ] [ ] . [ y z ]
In other words, if a_l and b_l are the lower α and β curves respectively, we have
[ a_l ] [ a_u ] [ ] = parallelReln() * [ ] . [ b_l ] [ b_u ]
|
inline |
Returns the total number of tetrahedra in this T x I
triangulation.
|
inherited |
Returns a short text representation of this object.
This text should be human-readable, should use plain ASCII characters where possible, and should not contain any newlines.
Within these limits, this short text ouptut should be as information-rich as possible, since in most cases this forms the basis for the Python __str__()
and __repr__()
functions.
__str__()
will use precisely this function, and for most classes the Python __repr__()
function will incorporate this into its output.
|
inlinenoexcept |
Swaps the contents of this and the given T x I
triangulation.
other | the triangulation whose contents should be swapped with this. |
|
protectednoexceptinherited |
Swaps all data that is managed by this base class with the given triangulation.
noexcept
, even though it calls Triangulation<3>::swap() which is not noexcept
. This is because the only potential cause of exceptions comes from packet event listeners, and the internal triangulation here does not belong to a packet.other | the triangulation whose data should be swapped with this. |
|
inherited |
Returns the name of this specific triangulation of T x I
in TeX format.
No leading or trailing dollar signs will be included.
|
inherited |
Returns a short text representation of this object using unicode characters.
Like str(), this text should be human-readable, should not contain any newlines, and (within these constraints) should be as information-rich as is reasonable.
Unlike str(), this function may use unicode characters to make the output more pleasant to read. The string that is returned will be encoded in UTF-8.
|
inlineoverridevirtual |
Writes the name of this specific triangulation of T x I
to the given output stream.
The name will be written as a human-readable string.
out | the output stream to which to write. |
Implements regina::TxICore.
|
inlineoverridevirtual |
Writes the name of this specific triangulation of T x I
in TeX format to the given output stream.
No leading or trailing dollar signs will be written.
out | the output stream to which to write. |
Implements regina::TxICore.
|
inlineinherited |
Writes a detailed text representation of this object to the given output stream.
out | the output stream to which to write. |
|
inlineinherited |
Writes a short text representation of this object to the given output stream.
out | the output stream to which to write. |
|
protectedinherited |
Expresses the α and β curves for each torus boundary in terms of specific tetrahedron edges and vertices.
The elements bdryReln_[0] and bdryReln_[1] refer to the upper and lower boundaries respectively, and each of these matrices must have determinant ±1. See bdryReln() for further details.
|
protectedinherited |
Describes which tetrahedron vertices play which roles in the upper and lower boundary triangles.
See bdryRoles() for details.
|
protectedinherited |
The tetrahedra that provide the upper and lower boundary triangles.
See bdryTet() for details.
|
protectedinherited |
A full copy of the T x I
triangulation that is described.
|
protectedinherited |
Expresses the lower α and β curves in terms of the upper α and β curves.
See parallelReln() for details.