27 #include <boost/shared_ptr.hpp>
28 #include <boost/numeric/ublas/vector.hpp>
29 #include <boost/numeric/ublas/io.hpp>
32 using namespace boost::numeric::ublas;
53 double getCoefficient(
unsigned int i)
const throw (std::out_of_range);
55 void setCoefficient(
unsigned int i,
double c)
throw (std::out_of_range);
61 void negate() {_coefficients *= -1.;}
63 int dimension()
const {
return _coefficients.size();}
67 boost::numeric::ublas::vector<double>::const_iterator
begin()
const {
return _coefficients.begin();}
69 boost::numeric::ublas::vector<double>::const_iterator
end()
const {
return _coefficients.end();}
71 const boost::numeric::ublas::vector<double>&
vect()
const {
return _coefficients;}
76 double halfSpaceNorm = std::inner_product(_coefficients.begin(), _coefficients.end(), _coefficients.begin(), 0.);
77 halfSpaceNorm = sqrt(halfSpaceNorm);
78 double scalarProduct = std::inner_product(thisPoint.begin(), thisPoint.end(), _coefficients.begin(), 0.);
79 double distanceToHyperplane = (scalarProduct+_constant) / halfSpaceNorm;
80 return distanceToHyperplane;
84 double scalarProduct = std::inner_product(thisPoint.begin(), thisPoint.end(), _coefficients.begin(), 0.);
85 double distanceToHyperplane = (scalarProduct+_constant) / halfSpaceNorm;
86 return distanceToHyperplane;
90 const boost::numeric::ublas::vector<double>& thisPoint,
91 boost::numeric::ublas::vector<double>& projectedPoint,
92 double halfSpaceNorm)
const {
93 double scalarProduct = std::inner_product(thisPoint.begin(), thisPoint.end(), _coefficients.begin(), 0.);
94 double distanceToHyperplane = (scalarProduct+_constant) / halfSpaceNorm;
95 projectedPoint = thisPoint - distanceToHyperplane*_coefficients;
96 return distanceToHyperplane;
99 void dump(std::ostream &this_ostream)
const {
100 this_ostream <<
"(" << getConstant() <<
", ";
101 unsigned int RnDIM = _coefficients.size();
102 {
for (
unsigned int ii=0; ii<RnDIM; ++ii) {
103 this_ostream << getCoefficient(ii);
105 this_ostream <<
", ";
118 #endif // HALFSPACE_Rn
double computeDistancePointHyperplane(const boost::numeric::ublas::vector< double > &thisPoint, double halfSpaceNorm) const
void setConstant(double c)
boost::numeric::ublas::vector< double >::const_iterator begin() const
A half-space whose frontier is a linear (n-1) dimension space. _constant + _coefficients[0].x1 + ... + _coefficients[n-1].xn >= 0.
boost::numeric::ublas::vector< double > _coefficients
The normal vector.
double computeDistancePointHyperplane(const boost::numeric::ublas::vector< double > &thisPoint, boost::numeric::ublas::vector< double > &projectedPoint, double halfSpaceNorm) const
void dump(std::ostream &this_ostream) const
double _constant
The second member constant.
double computeDistancePointHyperplane(const boost::numeric::ublas::vector< double > &thisPoint) const
double getConstant() const
const boost::numeric::ublas::vector< double > & vect() const
std::string getSideAsText() const
boost::numeric::ublas::vector< double >::const_iterator end() const