Regina 7.3 Calculation Engine
|
Used to enumerate all maximal admissible faces of a polyhedral cone under a given set of admissibility constraints. More...
#include <enumerate/maxadmissible.h>
Static Public Member Functions | |
template<class BitmaskType , class RayIterator > | |
static std::vector< BitmaskType > | enumerate (RayIterator beginExtremalRays, RayIterator endExtremalRays, const ValidityConstraints &constraints) |
Enumerates all maximal admissible faces of the given polyhedral cone. More... | |
Used to enumerate all maximal admissible faces of a polyhedral cone under a given set of admissibility constraints.
See the routine enumerate() for details.
All routines of interest within this class are static; no object of this class should ever be created.
|
static |
Enumerates all maximal admissible faces of the given polyhedral cone.
The cone must be the intersection of the non-negative orthant in some Euclidean space R^n with a linear subspace.
Admissibility is defined by the given set of constraints. Each constraint requires that at most one of a given set of coordinates can be non-zero; see the ValidityConstraints class for details. In particular, the quadrilateral constraints from normal surface theory are of this type.
It is simple to show that the admissible region of the cone is a union of faces, which we call "admissible faces". Those admissible faces that do not appear as a strict subface of some other admissible face are called "maximal admissible faces". The admissible region can therefore be expressed as the union of all maximal admissible faces.
The input for this routine is the set of all admissible extremal rays of the cone. These should be computed beforehand; for instance, using the routine DoubleDescription::enumerate().
The return value is a vector containing all maximal admissible faces. Each face F is described by a bitmask. Specifically: if we are working in R^n, then each face is described by a bitmask b of length n, where b[i]
is false
if every point x in F has x[i]=0
, and b[i]
is true
if every point x in the relative interior of F has x[i] > 0
.
(*it)[i] == 0
and (*it)[i] != 0
.beginExtremalRays | an iterator that begins the set of admissible extremal rays, as described above. Typically this would be rays.begin() if rays is a standard container type. |
endExtremalRays | an iterator that is past-the-end of the set of admissible extremal rays. Typically this would be rays.end() if rays is a standard container type. |
constraints | a set of validity constraints as described above. This may be ValidityConstraints::none to indicate no constraints (in which case there will be just one maximal admissible face). |