#include <nenumerator.h>
Inheritance diagram for regina::NVertexEnumerator:
Public Member Functions | |
template<class OutputIterator, class RayIterator, class FaceIterator> | |
void | enumerateVertices (OutputIterator results, RayIterator oldRaysFirst, RayIterator oldRaysLast, FaceIterator facesFirst, FaceIterator facesLast, const NMatrixInt &subspace, const NCompConstraintSet *constraints, NProgressNumber *progress=0) const =0 |
Determines the extremal rays of the intersection of the given cone with the given linear subspace. |
Each specific algorithm should be represented by a subclass of NVertexEnumerator.
See the enumerateVertices() notes for a full descrpition of the vertex enumeration problem.
|
Determines the extremal rays of the intersection of the given cone with the given linear subspace. The resulting rays will be newly allocated and written to the given output iterator. Their deallocation is the responsibility of whoever called this routine. The given cone is represented by a list of its extremal rays and a list of hyperplanes that determine its faces. Specifically the list of face hyperplanes must be a set of hyperplanes passing through the origin for which the actual faces of the cone are determined by intersecting this set of hyperplanes with some subspace of the entire vector space. Note that this list of hyperplanes might well be the faces themselves. The new linear subspace to intersect is represented by a matrix in which each row represents a hyperplane through the origin; the subspace is the intersection of all these hyperplanes. Each hyperplane is represented by the vector of a ray perpendicular to it. The resulting list of extremal rays is guaranteed not to contain any duplicates or redundancies. They are guaranteed to be of the same subclass of NRay as the initial extremal rays. Parameter constraints may contain a set of compatibility constraints representing necessary and sufficient conditions for a convex combination of two valid rays to be also valid, where the definition of valid depends upon the specific application at hand. If a set of constraints is passed, only valid extremal rays (as defined by these constraints) will be found. In this case the given cone may be a union of many smaller cones, since validity need not be preserved under addition. These smaller cones may intersect, and an extremal ray may belong to more than one such cone. In such cases, the ray should not be duplicated. A numeric progress watcher may be passed for progress reporting. If so, this routine will poll for cancellation requests accordingly.
Implemented in regina::NDoubleDescriptor. |