Regina Calculation Engine
|
Represents an annulus formed from a pair of triangles in a Seifert fibred space. More...
#include <subcomplex/satannulus.h>
Public Member Functions | |
SatAnnulus () | |
Creates a new uninitialised structure. More... | |
SatAnnulus (const SatAnnulus &cloneMe) | |
Creates a clone of the given structure. More... | |
SatAnnulus (Tetrahedron< 3 > *t0, Perm< 4 > r0, Tetrahedron< 3 > *t1, Perm< 4 > r1) | |
Creates a new structure initialised to the given values. More... | |
SatAnnulus & | operator= (const SatAnnulus &cloneMe) |
Makes this equal to a clone of the given structure. More... | |
bool | operator== (const SatAnnulus &other) const |
Determines whether or not this and the given structure describe the same annulus with the same representation. More... | |
bool | operator!= (const SatAnnulus &other) const |
Determines whether or not this and the given structure describe the same annulus with the same representation. More... | |
unsigned | meetsBoundary () const |
Determines how many triangles of this annulus lie on the boundary of the triangulation. More... | |
void | switchSides () |
Converts this into a representation of the same annulus from the other side. More... | |
SatAnnulus | otherSide () const |
Returns a representation of the same annulus from the other side. More... | |
void | reflectVertical () |
Reverses the direction of the vertical fibres in this annulus representation. More... | |
SatAnnulus | verticalReflection () const |
Returns a representation of this annulus in which the vertical direction of the fibres has been reversed. More... | |
void | reflectHorizontal () |
Performs a left-to-right reflection of this annulus representation. More... | |
SatAnnulus | horizontalReflection () const |
Returns a left-to-right reflected representation of this annulus. More... | |
void | rotateHalfTurn () |
Rotates the representation of this annulus by 180 degrees. More... | |
SatAnnulus | halfTurnRotation () const |
Returns a 180 degree rotated representation of this annulus. More... | |
bool | isAdjacent (const SatAnnulus &other, bool *refVert, bool *refHoriz) const |
Determines whether this and the given annulus are adjacent, possibly modulo vertical or horizontal reflections. More... | |
bool | isJoined (const SatAnnulus &other, Matrix2 &matching) const |
Determines whether this and the given annulus are joined in some form, even if the fibres on each annulus are not consistent. More... | |
bool | isTwoSidedTorus () const |
Determines whether this annulus has its boundaries identified to form an embedded two-sided torus within the surrounding triangulation. More... | |
void | transform (const Triangulation< 3 > *originalTri, const Isomorphism< 3 > *iso, Triangulation< 3 > *newTri) |
Adjusts this annulus representation according to the given isomorphism between triangulations. More... | |
SatAnnulus | image (const Triangulation< 3 > *originalTri, const Isomorphism< 3 > *iso, Triangulation< 3 > *newTri) const |
Returns the image of this annulus representation under the given isomorphism between triangulations. More... | |
void | attachLST (Triangulation< 3 > *tri, long alpha, long beta) const |
Attaches a layered solid torus to the this saturated annulus. More... | |
Public Attributes | |
Tetrahedron< 3 > * | tet [2] |
Describes which tetrahedra provide the first and second triangles. More... | |
Perm< 4 > | roles [2] |
Describes how the first and second triangles match up with individual tetrahedron vertices. More... | |
Represents an annulus formed from a pair of triangles in a Seifert fibred space.
This annulus is saturated, i.e., a union of fibres. More than that, the fibres run parallel to the two boundary edges of the annulus.
The annulus is described from one side only. The description includes an array of indices tet[] describing which two tetrahedra provide the triangles of the annulus, as well as an array of permutations roles[] detailing how the annulus matches up with the individual tetrahedron vertices.
The annulus can be drawn as follows, with the upper edge identified with the lower:
*--->---* |0 2 / | First | / 1| Second triangle | / | triangle |1 / | | / 2 0| *--->---*
Suppose that tet[0] and tet[1] are the tetrahedra providing the first and second triangles respectively. Then the markings 0..2 on the first triangle above correspond to vertices roles[0][0..2] of tetrahedron tet[0], and likewise the markings 0..2 on the second triangle above correspond to vertices roles[1][0..2] of tetrahedron tet[1].
Note that the diagram above can also be drawn as follows.
*--->---* | \ 2 1| First |0 \ | Second triangle | \ | triangle | \ 0| |1 2 \ | *--->---*
Note also that the labelling of the tetrahedra and their vertices establishes an orientation on the vertical fibres, as well as a left-to-right direction across the annulus.
For convenience we refer to edges roles[][0-1] as vertical, edges roles[][0-2] as horizontal, and edge roles[][1-2] as diagonal. This is illustrated in the following diagrams.
V Horizontal V Diagonal e *--->---* e *--->---* r | g / | r |H\ 2 1| t | a / 1| t | o\ | i | i / | i | r\ | c |D / | c | i\ 0| a | / 2 0| a | z\ | l *--->---* l *--->---*
a.tet(0)
. These same member arrays are accessed for writing through functions setTet() and setRoles(), so for instance the second triangle vertex roles for the saturated annulus a can be modified by calling a.setRoles(1, newRoles)
.