politopix  5.0.0
StrongRedundancyProcessing< POLYHEDRON > Class Template Reference

This class can be more time-consuming than WeakRedundancyProcessing or NoRedundancyProcessing because it will perform extra checks in the process of intersecting half-spaces. To determine if two vertices are neighbors it will make sure not to count half-spaces marked as redundant. More...

#include <UpdDoubleDescription_Rn.h>

Collaboration diagram for StrongRedundancyProcessing< POLYHEDRON >:
Collaboration graph

Public Member Functions

 StrongRedundancyProcessing (unsigned int ngbCond)
 
virtual ~StrongRedundancyProcessing ()
 
void fillListOfRedundantHS (const POLYHEDRON, std::vector< unsigned int > &, std::set< unsigned int > &getListOfRedundantHS)
 
void initNumberOfVerticesPerHalfSpace (const std::vector< boost::shared_ptr< Generator_Rn_SD > > &LG, unsigned int nbHS, unsigned int nbHP=0)
 Make sure all back pointers from half-spaces to vertices are set. More...
 
void addHalfSpace (bool isHyperplane)
 Make space for a new half-space. More...
 
void updateNumberOfVerticesPerHalfSpace (unsigned int HS, const std::vector< boost::shared_ptr< Generator_Rn_SD > > &GN_ON)
 The current face must mark all the vertices with state ON. More...
 
void incrementNumberForVerticesForHalfSpace (const boost::shared_ptr< Generator_Rn_SD > &GEN)
 Make sure all the half-spaces belonging to a given generator have their vertices number incremented. More...
 
void decrementNumberForVerticesForHalfSpace (const boost::shared_ptr< Generator_Rn_SD > &GEN)
 Make sure all the half-spaces belonging to a given generator have their vertices number decremented. More...
 
bool checkNeighbours (POLYHEDRON poly, const boost::shared_ptr< Generator_Rn_SD > &genIn, const boost::shared_ptr< Generator_Rn_SD > &genOut, std::vector< unsigned int > &commonFacets)
 
void unhookThisRedundantHalfSpace (std::vector< boost::shared_ptr< Generator_Rn_SD > > &listOfGen, unsigned int thisRedundantHS, unsigned int numberOfGeneratorsPerFacetWithoutHyp)
 
virtual void updateListOfRedundantHalfSpaces (std::vector< boost::shared_ptr< Generator_Rn_SD > > &listOfGen, int numberOfGeneratorsPerFacetWithoutHyp)
 
void unhookRedundantHalfSpaces (POLYHEDRON poly)
 
void unhookRedundantGenerators (POLYHEDRON poly)
 
void markHdescription (TrackingOperatorToResult &trackerHdesc, unsigned int truncationStep)
 
void dumpListOfRedundantHS (POLYHEDRON poly, std::ostream &this_stream)
 
void dumpSD (std::ostream &this_stream)
 

Protected Attributes

std::vector< std::set< unsigned int > > _allGenPerLinearConstraint
 Store all raw back pointers to know which vertices belong to a given half-space. More...
 
std::vector< bool > _isHalfSpace
 Tell if a linear constraint is a half-space or a hyperplane. More...
 
std::set< unsigned int > _listOfRedundantHS
 To know whether an half-space has been ticked redundant or not. More...
 
unsigned int _numberOfProcessedLinearConstraints
 The total number of processed half-spaces. More...
 
unsigned int _numberOfProcessedHyperplanes
 The total number of processed hyperplanes. More...
 
unsigned int _neigbourhoodCondition
 To define the relation between generators. More...
 

Detailed Description

template<class POLYHEDRON>
class StrongRedundancyProcessing< POLYHEDRON >

This class can be more time-consuming than WeakRedundancyProcessing or NoRedundancyProcessing because it will perform extra checks in the process of intersecting half-spaces. To determine if two vertices are neighbors it will make sure not to count half-spaces marked as redundant.

Definition at line 623 of file UpdDoubleDescription_Rn.h.

Constructor & Destructor Documentation

◆ StrongRedundancyProcessing()

template<class POLYHEDRON >
StrongRedundancyProcessing< POLYHEDRON >::StrongRedundancyProcessing ( unsigned int  ngbCond)
inline

Definition at line 626 of file UpdDoubleDescription_Rn.h.

◆ ~StrongRedundancyProcessing()

template<class POLYHEDRON >
virtual StrongRedundancyProcessing< POLYHEDRON >::~StrongRedundancyProcessing ( )
inlinevirtual

Definition at line 630 of file UpdDoubleDescription_Rn.h.

Member Function Documentation

◆ addHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::addHalfSpace ( bool  isHyperplane)
inline

Make space for a new half-space.

Definition at line 677 of file UpdDoubleDescription_Rn.h.

◆ checkNeighbours()

template<class POLYHEDRON >
bool StrongRedundancyProcessing< POLYHEDRON >::checkNeighbours ( POLYHEDRON  poly,
const boost::shared_ptr< Generator_Rn_SD > &  genIn,
const boost::shared_ptr< Generator_Rn_SD > &  genOut,
std::vector< unsigned int > &  commonFacets 
)
inline

Call poly->checkNeighbours() with an extra argument not to count redundant half-spaces in the process of declaring two vertices as neighbors.

Definition at line 715 of file UpdDoubleDescription_Rn.h.

◆ decrementNumberForVerticesForHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::decrementNumberForVerticesForHalfSpace ( const boost::shared_ptr< Generator_Rn_SD > &  GEN)
inline

Make sure all the half-spaces belonging to a given generator have their vertices number decremented.

Definition at line 707 of file UpdDoubleDescription_Rn.h.

◆ dumpListOfRedundantHS()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::dumpListOfRedundantHS ( POLYHEDRON  poly,
std::ostream &  this_stream 
)
inline

Definition at line 950 of file UpdDoubleDescription_Rn.h.

Here is the call graph for this function:

◆ dumpSD()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::dumpSD ( std::ostream &  this_stream)
inline

Definition at line 971 of file UpdDoubleDescription_Rn.h.

◆ fillListOfRedundantHS()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::fillListOfRedundantHS ( const  POLYHEDRON,
std::vector< unsigned int > &  ,
std::set< unsigned int > &  getListOfRedundantHS 
)
inline

Definition at line 632 of file UpdDoubleDescription_Rn.h.

◆ incrementNumberForVerticesForHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::incrementNumberForVerticesForHalfSpace ( const boost::shared_ptr< Generator_Rn_SD > &  GEN)
inline

Make sure all the half-spaces belonging to a given generator have their vertices number incremented.

Definition at line 700 of file UpdDoubleDescription_Rn.h.

◆ initNumberOfVerticesPerHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::initNumberOfVerticesPerHalfSpace ( const std::vector< boost::shared_ptr< Generator_Rn_SD > > &  LG,
unsigned int  nbHS,
unsigned int  nbHP = 0 
)
inline

Make sure all back pointers from half-spaces to vertices are set.

Definition at line 640 of file UpdDoubleDescription_Rn.h.

◆ markHdescription()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::markHdescription ( TrackingOperatorToResult trackerHdesc,
unsigned int  truncationStep 
)
inline

Definition at line 938 of file UpdDoubleDescription_Rn.h.

Here is the call graph for this function:

◆ unhookRedundantGenerators()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::unhookRedundantGenerators ( POLYHEDRON  poly)
inline

In some cases fuzzy generators are located somewhere in a fuzzy and are computed with redundant half-spaces. As they are likely not to have the sufficient number of half-spaces through the process, unhook them.

Definition at line 921 of file UpdDoubleDescription_Rn.h.

Here is the call graph for this function:

◆ unhookRedundantHalfSpaces()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::unhookRedundantHalfSpaces ( POLYHEDRON  poly)
inline

Definition at line 863 of file UpdDoubleDescription_Rn.h.

Here is the call graph for this function:

◆ unhookThisRedundantHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::unhookThisRedundantHalfSpace ( std::vector< boost::shared_ptr< Generator_Rn_SD > > &  listOfGen,
unsigned int  thisRedundantHS,
unsigned int  numberOfGeneratorsPerFacetWithoutHyp 
)
inline

Thanks to _allGenPerLinearConstraint we know all the generators associated to a given linear constraint. So remove thisRedundantHS from all the generators pointing towards him.

Definition at line 732 of file UpdDoubleDescription_Rn.h.

Here is the caller graph for this function:

◆ updateListOfRedundantHalfSpaces()

template<class POLYHEDRON >
virtual void StrongRedundancyProcessing< POLYHEDRON >::updateListOfRedundantHalfSpaces ( std::vector< boost::shared_ptr< Generator_Rn_SD > > &  listOfGen,
int  numberOfGeneratorsPerFacetWithoutHyp 
)
inlinevirtual

Inspect all half-spaces, find their lists of generators and numbers of generators to know whether they are redundant or not.

The test checking if the list of generators of a half-space H is included into the list of another one. H might not be a redundant half-space. Take the case of a segment in 3D defined by 2 hyperplanes and 2 bounding half-spaces. The lists of generators of the 2 half-spaces are included into the list of generators of the 2 hyperplanes but the half-spaces are not redundant.

Definition at line 794 of file UpdDoubleDescription_Rn.h.

Here is the call graph for this function:

◆ updateNumberOfVerticesPerHalfSpace()

template<class POLYHEDRON >
void StrongRedundancyProcessing< POLYHEDRON >::updateNumberOfVerticesPerHalfSpace ( unsigned int  HS,
const std::vector< boost::shared_ptr< Generator_Rn_SD > > &  GN_ON 
)
inline

The current face must mark all the vertices with state ON.

Definition at line 691 of file UpdDoubleDescription_Rn.h.

Member Data Documentation

◆ _allGenPerLinearConstraint

template<class POLYHEDRON >
std::vector< std::set< unsigned int > > StrongRedundancyProcessing< POLYHEDRON >::_allGenPerLinearConstraint
protected

Store all raw back pointers to know which vertices belong to a given half-space.

Definition at line 993 of file UpdDoubleDescription_Rn.h.

◆ _isHalfSpace

template<class POLYHEDRON >
std::vector< bool > StrongRedundancyProcessing< POLYHEDRON >::_isHalfSpace
protected

Tell if a linear constraint is a half-space or a hyperplane.

Definition at line 995 of file UpdDoubleDescription_Rn.h.

◆ _listOfRedundantHS

template<class POLYHEDRON >
std::set< unsigned int > StrongRedundancyProcessing< POLYHEDRON >::_listOfRedundantHS
protected

To know whether an half-space has been ticked redundant or not.

Definition at line 997 of file UpdDoubleDescription_Rn.h.

◆ _neigbourhoodCondition

template<class POLYHEDRON >
unsigned int StrongRedundancyProcessing< POLYHEDRON >::_neigbourhoodCondition
protected

To define the relation between generators.

Definition at line 1003 of file UpdDoubleDescription_Rn.h.

◆ _numberOfProcessedHyperplanes

template<class POLYHEDRON >
unsigned int StrongRedundancyProcessing< POLYHEDRON >::_numberOfProcessedHyperplanes
protected

The total number of processed hyperplanes.

Definition at line 1001 of file UpdDoubleDescription_Rn.h.

◆ _numberOfProcessedLinearConstraints

template<class POLYHEDRON >
unsigned int StrongRedundancyProcessing< POLYHEDRON >::_numberOfProcessedLinearConstraints
protected

The total number of processed half-spaces.

Definition at line 999 of file UpdDoubleDescription_Rn.h.


The documentation for this class was generated from the following file: