Regina Calculation Engine
|
Angle structures on triangulations. More...
Classes | |
class | regina::AngleStructureVector |
A vector of integers used to indirectly store the individual angles in an angle structure. More... | |
class | regina::AngleStructure |
Represents an angle structure on a triangulation. More... | |
struct | regina::AngleStructures::StructureInserter |
An output iterator used to insert angle structures into an AngleStructures list. More... | |
class | regina::AngleStructures |
A packet representing a collection of angle structures on a triangulation. More... | |
class | regina::XMLAngleStructureReader |
An XML element reader that reads a single angle structure. More... | |
class | regina::XMLAngleStructuresReader |
An XML packet reader that reads a single angle structure list. More... | |
Typedefs | |
typedef AngleStructureVector | regina::NAngleStructureVector |
Deprecated typedef for backward compatibility. More... | |
typedef AngleStructure | regina::NAngleStructure |
Deprecated typedef for backward compatibility. More... | |
typedef AngleStructures | regina::NAngleStructureList |
Deprecated typedef for backward compatibility. More... | |
Functions | |
regina::AngleStructureVector::AngleStructureVector (size_t length) | |
Creates a new vector all of whose entries are initialised to zero. More... | |
regina::AngleStructureVector::AngleStructureVector (const Vector< LargeInteger > &cloneMe) | |
Creates a new vector that is a clone of the given vector. More... | |
static MatrixInt * | regina::AngleStructureVector::makeAngleEquations (const Triangulation< 3 > *tri) |
Creates a new set of angle structure equations for the given triangulation. More... | |
regina::AngleStructure::AngleStructure (const Triangulation< 3 > *triang, AngleStructureVector *newVector) | |
Creates a new angle structure on the given triangulation with the given coordinate vector. More... | |
regina::AngleStructure::~AngleStructure () | |
Destroys this angle structure. More... | |
AngleStructure * | regina::AngleStructure::clone () const |
Creates a newly allocated clone of this angle structure. More... | |
Rational | regina::AngleStructure::angle (size_t tetIndex, int edgePair) const |
Returns the requested angle in this angle structure. More... | |
const Triangulation< 3 > * | regina::AngleStructure::triangulation () const |
Returns the triangulation on which this angle structure lies. More... | |
bool | regina::AngleStructure::isStrict () const |
Determines whether this is a strict angle structure. More... | |
bool | regina::AngleStructure::isTaut () const |
Determines whether this is a taut angle structure. More... | |
bool | regina::AngleStructure::isVeering () const |
Determines whether this is a veering structure. More... | |
const AngleStructureVector * | regina::AngleStructure::rawVector () const |
Gives read-only access to the raw vector that sits beneath this angle structure. More... | |
void | regina::AngleStructure::writeTextShort (std::ostream &out) const |
Writes a short text representation of this object to the given output stream. More... | |
void | regina::AngleStructure::writeXMLData (std::ostream &out) const |
Writes a chunk of XML containing this angle structure and all of its properties. More... | |
regina::AngleStructure::AngleStructure (const AngleStructure &)=delete | |
AngleStructure & | regina::AngleStructure::operator= (const AngleStructure &)=delete |
void | regina::AngleStructure::calculateType () const |
Calculates the structure type (strict or taut) and stores it as a property. More... | |
virtual | regina::AngleStructures::~AngleStructures () |
Destroys this list and all the angle structures within. More... | |
Triangulation< 3 > * | regina::AngleStructures::triangulation () const |
Returns the triangulation on which these angle structures lie. More... | |
bool | regina::AngleStructures::isTautOnly () const |
Returns whether this list was produced by enumerating taut angle structures only. More... | |
size_t | regina::AngleStructures::size () const |
Returns the number of angle structures stored in this list. More... | |
const AngleStructure * | regina::AngleStructures::structure (size_t index) const |
Returns the angle structure at the requested index in this list. More... | |
bool | regina::AngleStructures::spansStrict () const |
Determines whether any convex combination of the angle structures in this list is a strict angle structure. More... | |
bool | regina::AngleStructures::spansTaut () const |
Determines whether any angle structure in this list is a taut structure. More... | |
static AngleStructures * | regina::AngleStructures::enumerate (Triangulation< 3 > *owner, bool tautOnly=false, ProgressTracker *tracker=0) |
Enumerates all angle structures on the given triangulation. More... | |
static AngleStructures * | regina::AngleStructures::enumerateTautDD (Triangulation< 3 > *owner) |
A slower, alternative method to enumerate all taut angle structures on the given triangulation. More... | |
virtual void | regina::AngleStructures::writeTextShort (std::ostream &out) const override |
Writes a short text representation of this object to the given output stream. More... | |
virtual void | regina::AngleStructures::writeTextLong (std::ostream &out) const override |
Writes a detailed text representation of this object to the given output stream. More... | |
static XMLPacketReader * | regina::AngleStructures::xmlReader (Packet *parent, XMLTreeResolver &resolver) |
virtual bool | regina::AngleStructures::dependsOnParent () const override |
Determines if this packet depends upon its parent. More... | |
regina::AngleStructures::AngleStructures (bool tautOnly) | |
Creates a new empty angle structure list. More... | |
virtual Packet * | regina::AngleStructures::internalClonePacket (Packet *parent) const override |
Makes a newly allocated copy of this packet. More... | |
virtual void | regina::AngleStructures::writeXMLPacketData (std::ostream &out) const override |
Writes a chunk of XML containing the data for this packet only. More... | |
void | regina::AngleStructures::calculateSpanStrict () const |
Calculate whether the convex span of this list includes a strict angle structure. More... | |
void | regina::AngleStructures::calculateSpanTaut () const |
Calculate whether the convex span of this list includes a taut structure. More... | |
regina::AngleStructures::StructureInserter::StructureInserter () | |
Creates a new uninitialised output iterator. More... | |
regina::AngleStructures::StructureInserter::StructureInserter (AngleStructures &newList, Triangulation< 3 > *newOwner) | |
Creates a new output iterator. More... | |
regina::AngleStructures::StructureInserter::StructureInserter (const StructureInserter &cloneMe)=default | |
Creates a new output iterator that is a clone of the given iterator. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (const StructureInserter &cloneMe)=default |
Sets this iterator to be a clone of the given output iterator. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (AngleStructure *structure) |
Appends an angle structure to the end of the appropriate structure list. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator= (AngleStructureVector *vector) |
Appends the angle structure corresponding to the given vector to the end of the appropriate structure list. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator* () |
Returns a reference to this output iterator. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator++ () |
Returns a reference to this output iterator. More... | |
StructureInserter & | regina::AngleStructures::StructureInserter::operator++ (int) |
Returns a reference to this output iterator. More... | |
MatrixInt * | regina::makeAngleEquations (const Triangulation< 3 > *tri) |
Creates a new set of angle structure equations for the given triangulation. More... | |
regina::XMLAngleStructureReader::XMLAngleStructureReader (Triangulation< 3 > *newTri) | |
Creates a new angle structure reader. More... | |
AngleStructure * | regina::XMLAngleStructureReader::structure () |
Returns the angle structure that has been read. More... | |
virtual void | regina::XMLAngleStructureReader::startElement (const std::string &tagName, const regina::xml::XMLPropertyDict &tagProps, XMLElementReader *parentReader) override |
Signifies that parsing of this XML element is beginning. More... | |
virtual void | regina::XMLAngleStructureReader::initialChars (const std::string &chars) override |
Signifies that the initial text belonging to this XML element has been read. More... | |
virtual XMLElementReader * | regina::XMLAngleStructureReader::startSubElement (const std::string &subTagName, const regina::xml::XMLPropertyDict &subTagProps) override |
Signifies that a subelement of this XML element is about to be parsed. More... | |
regina::XMLAngleStructuresReader::XMLAngleStructuresReader (Triangulation< 3 > *newTri, XMLTreeResolver &resolver) | |
Creates a new angle structure list reader. More... | |
virtual Packet * | regina::XMLAngleStructuresReader::packet () override |
Returns the newly allocated packet that has been read by this element reader. More... | |
virtual XMLElementReader * | regina::XMLAngleStructuresReader::startContentSubElement (const std::string &subTagName, const regina::xml::XMLPropertyDict &subTagProps) override |
Used instead of startSubElement() for XML subelements that are not child packets or packet tags. More... | |
virtual void | regina::XMLAngleStructuresReader::endContentSubElement (const std::string &subTagName, XMLElementReader *subReader) override |
Used instead of endSubElement() for XML subelements that are not child packets or packet tags. More... | |
Variables | |
AngleStructures * | regina::AngleStructures::StructureInserter::list |
The list into which angle structures will be inserted. More... | |
Triangulation< 3 > * | regina::AngleStructures::StructureInserter::owner |
The triangulation on which the angle structures to be inserted lie. More... | |
Friends | |
class | regina::XMLAngleStructureReader |
class | regina::XMLAngleStructuresReader |
Angle structures on triangulations.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Deprecated typedef for backward compatibility.
This typedef will be removed in a future release of Regina.
Rational regina::AngleStructure::angle | ( | size_t | tetIndex, |
int | edgePair | ||
) | const |
Returns the requested angle in this angle structure.
The angle returned will be scaled down; the actual angle is the returned value multiplied by pi.
Within a tetrahedron, the three angles are indexed 0, 1 and 2. Angle i appears on edge i of the tetrahedron as well as its opposite edge (5-i).
tetIndex | the index in the triangulation of the tetrahedron in which the requested angle lives; this should be between 0 and Triangulation<3>::size()-1 inclusive. |
edgePair | the number representing the pair of edges holding the requested angle, as described above; this should be 0, 1 or 2. |
|
inline |
Creates a new angle structure on the given triangulation with the given coordinate vector.
triang | the triangulation on which this angle structure lies. |
newVector | a vector containing the individual angles in the angle structure. |
|
inlineprotected |
Creates a new empty angle structure list.
All properties are marked as unknown.
tautOnly | true if only taut structures are to be enuemrated (when the time comes for enumeration to be performed), or false if we should enumerate all vertices of the angle structure solution space. |
|
inline |
Creates a new vector that is a clone of the given vector.
cloneMe | the vector to clone. |
|
inline |
Creates a new vector all of whose entries are initialised to zero.
length | the number of elements in the new vector. |
|
protected |
Calculate whether the convex span of this list includes a strict angle structure.
|
protected |
Calculate whether the convex span of this list includes a taut structure.
|
protected |
Calculates the structure type (strict or taut) and stores it as a property.
AngleStructure* regina::AngleStructure::clone | ( | ) | const |
Creates a newly allocated clone of this angle structure.
|
inlineoverridevirtual |
Determines if this packet depends upon its parent.
This is true if the parent cannot be altered without invalidating or otherwise upsetting this packet.
true
if and only if this packet depends on its parent. Implements regina::Packet.
|
overridevirtual |
Used instead of endSubElement() for XML subelements that are not child packets or packet tags.
The default implementation does nothing.
subTagName | the name of the subelement closing tag. |
subReader | the child reader that was used to parse the subelement (this is the reader that was returned by the corresponding startContentSubElement() call). It is guaranteed that endElement() has already been called upon this child reader and that the child reader has not yet been destroyed. |
Reimplemented from regina::XMLPacketReader.
|
static |
Enumerates all angle structures on the given triangulation.
A list containing all vertices of the angle structure solution space will be returned.
The option is offered to find only taut structures (which are considerably faster to enumerate) instead of enumerating all vertex angle structures. See the tautOnly argument below.
The angle structure list that is created will be inserted as the last child of the given triangulation. This triangulation must remain the parent of this angle structure list, and must not change while this angle structure list remains in existence.
If a progress tracker is passed, the angle structure enumeration will take place in a new thread and this routine will return immediately. If the user cancels the operation from another thread, then the angle structure list will not be inserted into the packet tree (but the caller of this routine will still need to delete it). Regarding progress tracking, this routine will declare and work through a series of stages whose combined weights sum to 1; typically this means that the given tracker must not have been used before.
If no progress tracker is passed, the enumeration will run in the current thread and this routine will return only when the enumeration is complete. Note that this enumeration can be extremely slow for larger triangulations.
owner | the triangulation for which the vertex angle structures will be enumerated. |
tautOnly | true if only taut structures are to be enuemrated, or false if we should enumerate all vertices of the angle structure solution space; this defaults to false . |
tracker | a progress tracker through which progress will be reported, or 0 if no progress reporting is required. |
|
static |
A slower, alternative method to enumerate all taut angle structures on the given triangulation.
A list containing all taut angle structures will be returned.
The algorithm used by this routine is based on the double description method. The algorithm used by enumerate() (the preferred method) is instead based on linear programming, and is typically much faster than this routine for larger triangulations.
The angle structure list that is created will be inserted as the last child of the given triangulation. This triangulation must remain the parent of this angle structure list, and must not change while this angle structure list remains in existence.
owner | the triangulation for which the taut angle structures will be enumerated. |
|
overridevirtual |
Signifies that the initial text belonging to this XML element has been read.
The initial text is everything between the opening tag and the first subelement or closing tag.
The default implementation does nothing.
chars | the initial text for this element. |
Reimplemented from regina::XMLElementReader.
|
overrideprotectedvirtual |
Makes a newly allocated copy of this packet.
This routine should not insert the new packet into the tree structure, clone the packet's associated tags or give the packet a label. It should also not clone any descendants of this packet.
You may assume that the new packet will eventually be inserted into the tree beneath either the same parent as this packet or a clone of that parent.
parent | the parent beneath which the new packet will eventually be inserted. |
Implements regina::Packet.
|
inline |
Determines whether this is a strict angle structure.
A strict angle structure has all angles strictly between (not including) 0 and pi.
true
if and only if this is a strict angle structure.
|
inline |
Determines whether this is a taut angle structure.
A taut angle structure contains only angles 0 and pi.
Here we use the Kang-Rubinstein definition of a taut angle structure [1], which is based on the angles alone. In his original paper [2], Lackenby has an extra condition whereby 2-faces of the triangulation must have consistent coorientations, which we do not enforce here.
[1] E. Kang and J. H. Rubinstein, "Ideal triangulations of 3-manifolds II; Taut and angle structures", Algebr. Geom. Topol. 5 (2005), pp. 1505-1533.
[2] M. Lackenby, "Taut ideal triangulations of 3-manifolds", Geom. Topol. 4 (2000), pp. 369-395.
true
if and only if this is a taut structure.
|
inline |
Returns whether this list was produced by enumerating taut angle structures only.
true
if this list was produced by enumerating taut angle structures only, or false
if the enumeration procedure allowed for any angle structures.
|
inline |
Determines whether this is a veering structure.
A veering structure is taut angle structure with additional strong combinatorial constraints, which we do not outline here. For a definition, see C. D. Hodgson, J. H. Rubinstein, H. Segerman, and S. Tillmann, "Veering triangulations admit strict angle structures", Geom. Topol., 15 (2011), pp. 2073-2089.
Note that the Hodgson et al. definition is slightly more general than Agol's veering taut triangulations from his original paper: I. Agol, " Ideal triangulations of pseudo-Anosov mapping tori", in "Topology and Geometry in Dimension Three", volume 560 of Contemp. Math., pp. 1-17, Amer. Math. Soc., 2011. This mirrors the way in which the Kang-Rubinstein definition of taut angle structure is slightly more general than Lackenby's. See the Hodgson et al. paper for full details and comparisons between the two settings.
If this angle structure is not taut, or if the underlying triangulation is non-orientable, then this routine will return false
.
true
if and only if this is a veering structure.
|
static |
Creates a new set of angle structure equations for the given triangulation.
Each equation will be represented as a row of the matrix, and each column will represent a coordinate in the underlying coordinate system (which is described in the AngleStructureVector class notes).
The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.
This is identical to the global function makeAngleEquations(). It is offered again here in the vector class for consistency with the normal surface vector classes.
tri | the triangulation upon which these angle structure equations will be based. |
|
inline |
Creates a new set of angle structure equations for the given triangulation.
Each equation will be represented as a row of the matrix, and each column will represent a coordinate in the underlying coordinate system (which is described in the AngleStructureVector class notes).
The returned matrix will be newly allocated and its destruction will be the responsibility of the caller of this routine.
This routine is identical to the static class method AngleStructureVector::makeAngleEquations(). It is offered again here as a global routine so that it is accessible to Python users (who cannot access the AngleStructureVector class).
tri | the triangulation upon which these angle structure equations will be based. |
|
inline |
Returns a reference to this output iterator.
|
inline |
Returns a reference to this output iterator.
|
inline |
Returns a reference to this output iterator.
|
inline |
Appends an angle structure to the end of the appropriate structure list.
The given angle structure will be deallocated with the other angle structures in this list when the list is eventually destroyed.
structure | the angle structure to insert. |
|
inline |
Appends the angle structure corresponding to the given vector to the end of the appropriate structure list.
The given vector will be owned by the newly created angle structure and will be deallocated with the other angle structures in this list when the list is eventually destroyed.
vector | the vector of the angle structure to insert. |
|
default |
Sets this iterator to be a clone of the given output iterator.
cloneMe | the output iterator to clone. |
|
inlineoverridevirtual |
Returns the newly allocated packet that has been read by this element reader.
Deallocation of this new packet is not the responsibility of this class. Once this routine gives a non-zero return value, it should continue to give the same non-zero return value from this point onwards.
If this routine is ever to give a non-zero return value, it must be giving that non-zero return value by the time the first child packet or packet tag is encountered; otherwise child packets will not be inserted into the packet tree and/or packet tags will not be added.
The newly allocated packet should not be given a packet label. This will be done by XMLPacketReader::endSubElement().
The newly allocated packet may or may not be inserted in the packet tree structure; this does not matter (although if it is inserted it must be inserted in the correct place).
The newly allocated packet should not be given any associated packet tags. This will be done by XMLPacketReader::startSubElement().
The default implementation returns 0.
Reimplemented from regina::XMLPacketReader.
|
inline |
Gives read-only access to the raw vector that sits beneath this angle structure.
Generally users should not need this function. However, it is provided here in case the need should arise (e.g., for reasons of efficiency).
|
inline |
Returns the number of angle structures stored in this list.
|
inline |
Determines whether any convex combination of the angle structures in this list is a strict angle structure.
See AngleStructure::isStrict() for details on strict angle structures.
true
if and only if a strict angle structure can be produced.
|
inline |
Determines whether any angle structure in this list is a taut structure.
Because taut structures always appear as vertices of the angle structure solution space, this routine is equivalent to testing whether any convex combination of the angle structures in this list is a taut structure.
See AngleStructure::isTaut() for details on taut structures.
true
if and only if a taut structure can be produced.
|
overridevirtual |
Used instead of startSubElement() for XML subelements that are not child packets or packet tags.
The default implementation returns a new XMLElementReader which can be used to ignore the subelement completely.
subTagName | the name of the subelement opening tag. |
subTagProps | the properties associated with the subelement opening tag. |
Reimplemented from regina::XMLPacketReader.
|
overridevirtual |
Signifies that parsing of this XML element is beginning.
The default implementation does nothing.
tagName | the name of the opening tag for this element. |
tagProps | the properties associated with the opening tag. |
parentReader | the reader currently parsing the parent XML element, or 0 if this is the top-level element. If this paraneter is non-zero, it is guaranteed that startSubElement() has already been called upon the parent reader. |
Reimplemented from regina::XMLElementReader.
|
overridevirtual |
Signifies that a subelement of this XML element is about to be parsed.
The default implementation returns a new XMLElementReader which can be used to ignore the subelement completely.
subTagName | the name of the subelement opening tag. |
subTagProps | the properties associated with the subelement opening tag. |
Reimplemented from regina::XMLElementReader.
|
inline |
Returns the angle structure that has been read.
|
inline |
|
inline |
Creates a new uninitialised output iterator.
|
inline |
Creates a new output iterator.
The member variables of this iterator will be initialised according to the parameters passed to this constructor.
newList | the list into which angle structures will be inserted. |
newOwner | the triangulation on which the structures to be inserted lie. |
|
default |
Creates a new output iterator that is a clone of the given iterator.
cloneMe | the output iterator to clone. |
|
inline |
Returns the triangulation on which this angle structure lies.
Triangulation<3>* regina::AngleStructures::triangulation | ( | ) | const |
Returns the triangulation on which these angle structures lie.
|
overridevirtual |
Writes a detailed text representation of this object to the given output stream.
This may be reimplemented by subclasses, but the parent Packet class offers a reasonable default implementation.
out | the output stream to which to write. |
Reimplemented from regina::Packet.
void regina::AngleStructure::writeTextShort | ( | std::ostream & | out | ) | const |
Writes a short text representation of this object to the given output stream.
out | the output stream to which to write. |
|
overridevirtual |
Writes a short text representation of this object to the given output stream.
This must be reimplemented by subclasses.
out | the output stream to which to write. |
Implements regina::Packet.
void regina::AngleStructure::writeXMLData | ( | std::ostream & | out | ) | const |
Writes a chunk of XML containing this angle structure and all of its properties.
This routine will be called from within AngleStructures::writeXMLPacketData().
out | the output stream to which the XML should be written. |
|
overrideprotectedvirtual |
Writes a chunk of XML containing the data for this packet only.
You may assume that the packet opening tag (including the packet type and label) has already been written, and that all child packets followed by the corresponding packet closing tag will be written immediately after this routine is called. This routine need only write the internal data stored in this specific packet.
out | the output stream to which the XML should be written. |
Implements regina::Packet.
|
inline |
Creates a new angle structure reader.
newTri | the triangulation on which this angle structure lies. |
|
inline |
Creates a new angle structure list reader.
newTri | the triangulation on which these angle structures are placed. |
resolver | the master resolver that will be used to fix dangling packet references after the entire XML file has been read. |
|
inline |
Destroys this angle structure.
The underlying vector of angles will also be deallocated.
|
inlinevirtual |
Destroys this list and all the angle structures within.
AngleStructures* regina::AngleStructures::StructureInserter::list |
The list into which angle structures will be inserted.
Triangulation<3>* regina::AngleStructures::StructureInserter::owner |
The triangulation on which the angle structures to be inserted lie.