8 #ifndef ISEEML_OBJECT_HH
9 #define ISEEML_OBJECT_HH
19 #define _USE_MATH_DEFINES
25 #include <iSeeML/NameSpaces.hpp>
55 static const double smallDouble;
61 static const string ClassName;
85 virtual const string className()
const {
return ClassName; }
111 virtual void writeTo(ostream& O)
const = 0;
147 #ifdef ISEEML_CHECK_OBJECT_PRECOND
148 cerr << ClassName <<
"::algCoord: empty algebraic vector,"
149 << endl <<
" returning zero for " << i <<
"th element..."
167 int i; O <<
'(';
for(i = 1; i <= algDimension(); i++)
168 O << algCoord(i) << (i == algDimension() ?
")" :
", "); }
187 {
return( className() == other.
className() ); }
201 static const T&
min(
const T& a,
const T& b)
202 {
return( a < b ? a : b ); }
215 static const T&
max(
const T& a,
const T& b)
216 {
return( a > b ? a : b ); }
230 static const T&
between(
const T& min,
const T& value,
const T& max)
231 {
return( value > min ? (value < max ? value : max) : min ); }
240 static double sqr(
const double& x) {
return( x * x ); }
252 static double mod2pi(
const double& theta) {
253 double res = theta;
const double PIx2 = 2 * M_PI;
256 while (res <= - M_PI)
268 {
return theta * 180 / M_PI; }
277 {
return theta * M_PI / 180; }
289 {
return( x > smallDouble ); }
303 {
return( isPositive(- x) ); }
313 {
return( fabs(x) < smallDouble ); }
325 static int sign(
const double& x)
326 {
return( isZero(x) ? 0 : ( x < 0 ? -1 : 1) ); }
347 #endif // end of definition
virtual void algWriteTo(ostream &O) const
Description method for algebraic vectors, writing this vector in a given output stream: coordinates f...
Definition: Object.hpp:166
virtual double algCoord(const int i) const
Description method for algebraic vectors, giving coordinate of given index for this vector.
Definition: Object.hpp:144
static double rad2deg(const double &theta)
Method transforming an angle in radian, with between -1 (excluded) and 1 (included),...
Definition: Object.hpp:267
static double deg2rad(const double &theta)
Method transforming an angle in degree, with between -1 (excluded) and 1 (included),...
Definition: Object.hpp:276
static double sqr(const double &x)
Method giving the square of a double.
Definition: Object.hpp:240
bool sameClass(const iSeeML::Object &other)
Method verifying that a given object has the same type (same class name) than the current one.
Definition: Object.hpp:186
ostream & operator<<(ostream &O, const iSeeML::Object &o)
Modification method, writing a description of a ISeeML object in a given output stream.
Definition: Object.hpp:343
virtual ~Object()
This virtual class needs a virtual destructor.
Definition: Object.hpp:67
static double mod2pi(const double &theta)
Method giving the angle between - (excluded) and (included), which is equal to a given angle modulo...
Definition: Object.hpp:252
static const T & max(const T &a, const T &b)
Method giving the maximum of two elements.
Definition: Object.hpp:215
static bool isZero(const double &x)
Method comparing a double to zero.
Definition: Object.hpp:312
static const T & min(const T &a, const T &b)
Method giving the minimum of two elements.
Definition: Object.hpp:201
This class is the base class of ISeeML: every class of ISeeML inherits this one.
Definition: Object.hpp:47
static int sign(const double &x)
Method giving the sign of a double.
Definition: Object.hpp:325
virtual int algDimension() const
Description method for algebraic vectors, giving the dimension of the containing space (default is ze...
Definition: Object.hpp:127
static const T & between(const T &min, const T &value, const T &max)
Method filtering a value wrt bounds.
Definition: Object.hpp:230
static bool isPositive(const double &x)
Method telling whether a double is strictly positive.
Definition: Object.hpp:288
static bool isNegative(const double &x)
Method telling whether a double is strictly negative.
Definition: Object.hpp:302
virtual void writeTo(ostream &O) const =0
Description method, writing a description of the object into a given output stream.
virtual const string className() const
Description method, giving the object's class name.
Definition: Object.hpp:85