politopix  4.1.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Neighbours_Rn Class Reference

Class dedicated to degeneration processing when looking for neighbours.
Let A be a polytope of $ \mathbb{R}^n, A = H_1^+ \cap H_2^+ \cap ... H_{n-1}^+ \cap ... H_k^+ $ where k>n.
Let [vi, vj] be a segment of two vertices of A such as: More...

#include <Neighbours_Rn.h>

Collaboration diagram for Neighbours_Rn:
Collaboration graph

Public Member Functions

 Neighbours_Rn ()
 
void addGenerator (const std::vector< unsigned int > &commonFacets, unsigned int numbergenIN, unsigned int numbergenOUT, HalfSpace_Rn::State state)
 Tell whether a pseudo neighbor is a genuine one comparing set of half-spaces. More...
 
void begin ()
 Iterator function. More...
 
void next ()
 Iterator function. More...
 
void checkIterator ()
 Make sure we don't point on a generator with state ON. More...
 
bool end ()
 Iterator function. More...
 
unsigned int currentGenInNumber ()
 Iterator function. More...
 
unsigned int currentGenOutNumber ()
 Iterator function. More...
 
void dump (std::ostream &ofs)
 Display the content on the stream passed as an argument. More...
 

Protected Attributes

unsigned int _iterator
 A runner to iterate through the list of genuine neighbors. More...
 
std::vector< HalfSpace_Rn::State_GeneratorsState
 The pair of generators state. More...
 
std::vector< unsigned int > _GeneratorsInNumber
 The generator numbers IN in a global list. More...
 
std::vector< unsigned int > _GeneratorsOutNumber
 The generator numbers OUT in a global list. More...
 
std::vector< std::vector
< unsigned int > > 
_HSPerNewGenerators
 For each generator, store all raw pointers on their corresponding half-spaces. More...
 

Detailed Description

Class dedicated to degeneration processing when looking for neighbours.
Let A be a polytope of $ \mathbb{R}^n, A = H_1^+ \cap H_2^+ \cap ... H_{n-1}^+ \cap ... H_k^+ $ where k>n.
Let [vi, vj] be a segment of two vertices of A such as:

  • they share (n-1) hyperplanes in common: $ H_{ij} = \{ H_1, H_2, ... H_{n-1} \} $
  • there exists an hyperplane $ \mathcal{H} $ separating [vj, vk]

We call [vi, vj] a pseudo-edge if it respects the first assumption. The question is: to which condition [vi, vj] is a genuine edge? Can we answer the question only by processing the pseudo-edges separated by the hyperplane $ \mathcal{H} $? The straight line $ (v_i, v_j) \subset H_1 \cap H_2 \cap ... H_{n-1} \text{~with~} \mathcal{H} \neq H_u $, $ u \in \{ 1, ..., n-1 \} $. So $ H_1 \cap H_2 \cap ... H_{n-1} \cap H_n^+ \cap ... H_k^+ = F_A $ is a face of A of dimension at least 1. Let's assume [vi, vj] is not an edge of A, then it is not an edge of FA and we cannot have FA included neither in $ \mathcal{H}^+ $ nor in $ \mathcal{H}^- $ as $ \mathcal{H} $ separates [vi, vj] . So $ \mathcal{H} $ separates FA and we can find an edge [va, vb] of FA such as:

  • $ \mathcal{H} $ separates [va, vb] or
  • $ \mathcal{H} $ passes through va or
  • $ \mathcal{H} $ passes through vb

As [va, vb] is an edge of FA, va and vb share in common the list of hyperplanes Hab . Hab contains the (n-1) half-spaces $ H_1, H_2, ... H_{n-1} $ and others because the intersection $ H_1 \cap H_2 \cap ... H_{n-1} $ does not define a straight line. So if [vi, vj] is not an edge of A, we can find a genuine edge [va, vb] , intersecting with $ \mathcal{H} $, such as $ H_{ij} \subset H_{ab} $

Definition at line 59 of file Neighbours_Rn.h.

Constructor & Destructor Documentation

Neighbours_Rn::Neighbours_Rn ( )
inline

Definition at line 62 of file Neighbours_Rn.h.

Member Function Documentation

void Neighbours_Rn::addGenerator ( const std::vector< unsigned int > &  commonFacets,
unsigned int  numbergenIN,
unsigned int  numbergenOUT,
HalfSpace_Rn::State  state 
)
inline

Tell whether a pseudo neighbor is a genuine one comparing set of half-spaces.

Parameters
commonFacetsthe set of common half-spaces pointers between this and gen
numbergenINthe generator number candidate to be a genuine end of edge
numbergenOUTthe generator number candidate to be the other genuine end of edge
stateequal to HalfSpace_Rn::hs_IN_OR_OUT or HalfSpace_Rn::hs_ON according to the edge property

Definition at line 69 of file Neighbours_Rn.h.

Here is the call graph for this function:

Here is the caller graph for this function:

void Neighbours_Rn::begin ( )
inline

Iterator function.

Definition at line 128 of file Neighbours_Rn.h.

Here is the call graph for this function:

Here is the caller graph for this function:

void Neighbours_Rn::checkIterator ( )
inline

Make sure we don't point on a generator with state ON.

Definition at line 134 of file Neighbours_Rn.h.

Here is the caller graph for this function:

unsigned int Neighbours_Rn::currentGenInNumber ( )
inline

Iterator function.

Definition at line 143 of file Neighbours_Rn.h.

Here is the caller graph for this function:

unsigned int Neighbours_Rn::currentGenOutNumber ( )
inline

Iterator function.

Definition at line 146 of file Neighbours_Rn.h.

Here is the caller graph for this function:

void Neighbours_Rn::dump ( std::ostream &  ofs)
inline

Display the content on the stream passed as an argument.

Definition at line 149 of file Neighbours_Rn.h.

Here is the call graph for this function:

bool Neighbours_Rn::end ( )
inline

Iterator function.

Definition at line 140 of file Neighbours_Rn.h.

Here is the caller graph for this function:

void Neighbours_Rn::next ( )
inline

Iterator function.

Definition at line 131 of file Neighbours_Rn.h.

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

std::vector< unsigned int > Neighbours_Rn::_GeneratorsInNumber
protected

The generator numbers IN in a global list.

Definition at line 169 of file Neighbours_Rn.h.

std::vector< unsigned int > Neighbours_Rn::_GeneratorsOutNumber
protected

The generator numbers OUT in a global list.

Definition at line 171 of file Neighbours_Rn.h.

std::vector< HalfSpace_Rn::State > Neighbours_Rn::_GeneratorsState
protected

The pair of generators state.

Definition at line 167 of file Neighbours_Rn.h.

std::vector< std::vector< unsigned int > > Neighbours_Rn::_HSPerNewGenerators
protected

For each generator, store all raw pointers on their corresponding half-spaces.

Definition at line 173 of file Neighbours_Rn.h.

unsigned int Neighbours_Rn::_iterator
protected

A runner to iterate through the list of genuine neighbors.

Definition at line 165 of file Neighbours_Rn.h.


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