70 bool isEqual1(
const boost::shared_ptr<Generator_Rn>& gn,
unsigned int RnDIM,
double TOL2) {
82 bool isEqual2(
const boost::shared_ptr<Generator_Rn>& gn,
unsigned int RnDIM,
double TOL2) {
98 void switchFacets(
const std::vector< boost::shared_ptr<HalfSpace_Rn> >& tab) {
99 _supportFacets.clear();
100 _supportFacets = tab;
104 void setFacet(boost::shared_ptr<HalfSpace_Rn> F) {_supportFacets.push_back(F);}
107 void importFacets(
const std::set< boost::shared_ptr<HalfSpace_Rn> >& setOfFacets) {
108 _supportFacets.clear();
109 std::set< boost::shared_ptr<HalfSpace_Rn> >::const_iterator it;
110 {
for (it=setOfFacets.begin(); it!=setOfFacets.end(); ++it) {
111 _supportFacets.push_back(*it);
116 void exportFacets(std::set< boost::shared_ptr<HalfSpace_Rn> >& setOfFacets)
const {
117 std::vector< boost::shared_ptr<HalfSpace_Rn> >::const_iterator it;
118 {
for (it=_supportFacets.begin(); it!=_supportFacets.end(); ++it) {
119 setOfFacets.insert(*it);
124 void removeFacet(
unsigned int i)
throw (std::out_of_range,std::domain_error);
128 boost::shared_ptr<HalfSpace_Rn>
getFacet(
unsigned int i)
const throw (std::out_of_range) {
129 if (i < _supportFacets.size()) {
130 return _supportFacets[i];
134 throw std::out_of_range(errorMessage);
147 void makeDiff(
const boost::shared_ptr<Generator_Rn>& gn1,
const boost::shared_ptr<Generator_Rn>& gn2) {
151 void makeSum(
const boost::shared_ptr<Generator_Rn>& gn1,
const boost::shared_ptr<Generator_Rn>& gn2) {
156 const boost::shared_ptr<Generator_Rn>& gn1,
157 const boost::shared_ptr<Generator_Rn>& gn2,
160 _coordinates = coef1*gn1->_coordinates + coef2*gn2->_coordinates;
165 double getNormalDistance(
const boost::shared_ptr<Generator_Rn>& gn1,
double coef,
unsigned int RnDIM) {
167 {
for (
unsigned int ii=0; ii<RnDIM; ++ii) {
183 double dist = norm_2(distV);
187 void dump(std::ostream &this_ostream)
const {
190 {
for (
unsigned int ii=0; ii<
_coordinates.size(); ++ii) {
193 this_ostream <<
", ";
198 void load(std::istream &this_istream) {
200 for (
unsigned int coord_count=0; coord_count<
_coordinates.size(); coord_count++) {
206 void save(std::ostream &this_ostream)
const {
207 for (
unsigned int coord_count=0; coord_count<
_coordinates.size(); coord_count++) {
290 bool isEqual1(
const boost::shared_ptr<Generator_Rn_SD>& gn,
unsigned int RnDIM,
double TOL2) {
302 bool isEqual2(
const boost::shared_ptr<Generator_Rn_SD>& gn,
unsigned int RnDIM,
double TOL2) {
323 std::set< unsigned int >::const_iterator it;
324 {
for (it=setOfFacets.begin(); it!=setOfFacets.end(); ++it) {
331 std::vector< unsigned int >::const_iterator it;
333 setOfFacets.insert(*it);
338 void removeFacet(
unsigned int i)
throw (std::out_of_range,std::domain_error) {
345 unsigned int getFacet(
unsigned int i)
const throw (std::out_of_range) {
351 throw std::out_of_range(errorMessage);
377 void makeDiff(
const boost::shared_ptr<Generator_Rn_SD>& gn1,
const boost::shared_ptr<Generator_Rn_SD>& gn2) {
381 void makeSum(
const boost::shared_ptr<Generator_Rn_SD>& gn1,
const boost::shared_ptr<Generator_Rn_SD>& gn2) {
386 const boost::shared_ptr<Generator_Rn_SD>& gn1,
387 const boost::shared_ptr<Generator_Rn_SD>& gn2,
390 _coordinates = coef1*gn1->_coordinates + coef2*gn2->_coordinates;
395 double getNormalDistance(
const boost::shared_ptr<Generator_Rn_SD>& gn1,
double coef,
unsigned int RnDIM) {
397 {
for (
unsigned int ii=0; ii<RnDIM; ++ii) {
413 double dist = norm_2(distV);
417 void dump(std::ostream &this_ostream)
const {
420 {
for (
unsigned int ii=0; ii<
_coordinates.size(); ++ii) {
423 this_ostream <<
", ";
428 void load(std::istream &this_istream) {
430 for (
unsigned int coord_count=0; coord_count<
_coordinates.size(); coord_count++) {
436 void save(std::ostream &this_ostream)
const {
437 for (
unsigned int coord_count=0; coord_count<
_coordinates.size(); coord_count++) {
457 #endif // GENERATOR_Rn
void makeSum(const boost::shared_ptr< Generator_Rn > &gn1, const boost::shared_ptr< Generator_Rn > &gn2)
std::vector< boost::shared_ptr< HalfSpace_Rn > > _supportFacets
Contain the list of all support facets.
std::vector< unsigned int >::const_iterator facetsEnd() const
bool isFacetInside(unsigned int F) const
Check whether the given half-space is inside the generator's list.
const vector< double > & vect() const
void setGeneratorNumber(unsigned int gn)
void makeCoefSum(const boost::shared_ptr< Generator_Rn_SD > &gn1, const boost::shared_ptr< Generator_Rn_SD > &gn2, double coef1, double coef2)
bool isEqual1(const boost::shared_ptr< Generator_Rn_SD > &gn, unsigned int RnDIM, double TOL2)
void load(std::istream &this_istream)
boost::shared_ptr< Generator_Rn > makeGenerator_Rn() const
To make a Generator_Rn out of a Generator_Rn_SD.
unsigned int getFacet(unsigned int i) const
Return the i-th facet number.
void makeCoefSum(const boost::shared_ptr< Generator_Rn > &gn1, const boost::shared_ptr< Generator_Rn > &gn2, double coef1, double coef2)
bool isEqual2(const boost::shared_ptr< Generator_Rn > &gn, unsigned int RnDIM, double TOL2)
A half-space whose frontier is a linear (n-1) dimension space. _constant + _coefficients[0].x1 + ... + _coefficients[n-1].xn >= 0.
unsigned int numberOfFacets() const
Return the total number of support faces.
friend class Generator_Rn
void importFacets(const std::set< boost::shared_ptr< HalfSpace_Rn > > &setOfFacets)
Insert all facets stored in the argument.
unsigned int numberOfFacets() const
Return the total number of support faces.
Generator_Rn_SD(unsigned int n, unsigned int nb, Status st)
Creates a n-coordinates generator.
void setFacet(unsigned int F)
Insert a new support facet for the current generator.
void load(std::istream &this_istream)
std::vector< unsigned int > _supportIntFacets
Contain the list of all support facets.
double getCoordinate(unsigned int i) const
boost::shared_ptr< HalfSpace_Rn > getFacet(unsigned int i) const
void removeFacet(unsigned int i)
Remove the i-th facet in list.
unsigned int _generatorNumber
The SD generator embeds its own number.
void save(std::ostream &this_ostream) const
void setStatus(Status st)
vector< double >::const_iterator end() const
void setCoordinate(unsigned int i, double val)
unsigned int getGeneratorNumber() const
void importFacets(const std::set< unsigned int > &setOfFacets)
Insert all facets stored in the argument.
void save(std::ostream &this_ostream) const
vector< double >::const_iterator end() const
void setAllFacets(const std::vector< unsigned int > &AF)
Insert a new support facet for the current generator.
void makeSum(const boost::shared_ptr< Generator_Rn_SD > &gn1, const boost::shared_ptr< Generator_Rn_SD > &gn2)
void dump(std::ostream &this_ostream) const
double getCoordinate(unsigned int i) const
void switchFacets(const std::vector< boost::shared_ptr< HalfSpace_Rn > > &tab)
Clear the list of facets.
vector< double >::const_iterator begin() const
A n-coordinates generator, which can be a vertex or an edge whether it is contained by a polytope or ...
std::vector< unsigned int >::const_iterator facetsBegin() const
void exportFacets(std::set< unsigned int > &setOfFacets) const
Store all facets in a set.
double getNormalDistance(const boost::shared_ptr< Generator_Rn_SD > &gn1, double coef, unsigned int RnDIM)
static std::string concatStrings(int i, const std::string &functionName)
Useful function to provide error message to the exception mechanism.
~Generator_Rn_SD()
Destructor.
void setFacet(boost::shared_ptr< HalfSpace_Rn > F)
Insert a new support facet for the current generator.
void makeDiff(const boost::shared_ptr< Generator_Rn_SD > &gn1, const boost::shared_ptr< Generator_Rn_SD > &gn2)
void clearFacets()
Clear the list of facets.
const vector< double > & vect() const
void makeDiff(const boost::shared_ptr< Generator_Rn > &gn1, const boost::shared_ptr< Generator_Rn > &gn2)
Generator_Rn(const Generator_Rn &gn)
Copy constructor.
Generator_Rn_SD(const Generator_Rn_SD &gn)
Copy constructor.
double distanceFrom(const Generator_Rn &P)
A n-coordinates generator for internal data structure. It can be a vertex or an edge whether it is em...
double distanceFrom(const Generator_Rn_SD &P)
void exportFacets(std::set< boost::shared_ptr< HalfSpace_Rn > > &setOfFacets) const
Store all facets in a set.
vector< double > _coordinates
The set of coordinates.
Status _status
The SD generator embeds its status to trace the operations.
double getNormalDistance(const boost::shared_ptr< Generator_Rn > &gn1, double coef, unsigned int RnDIM)
vector< double >::const_iterator begin() const
bool isEqual1(const boost::shared_ptr< Generator_Rn > &gn, unsigned int RnDIM, double TOL2)
vector< double > _coordinates
The set of coordinates.
void setCoordinates(const vector< double > &vec)
void dump(std::ostream &this_ostream) const
unsigned int getRawFacet(unsigned int i)
Return the i-th facet. No check is performed!
HalfSpace_Rn * getRawFacet(unsigned int i)
Return the i-th facet as a pointer for very fast comparisons. No check is performed! ...
Generator_Rn_SD(const Generator_Rn &gn, unsigned int nb, Status st)
Constructor with a Generator_Rn.
void setCoordinate(unsigned int i, double val)
bool isEqual2(const boost::shared_ptr< Generator_Rn_SD > &gn, unsigned int RnDIM, double TOL2)