OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimTerm.h
Go to the documentation of this file.
1 
9 #ifndef OSSIM_TERM_H
10 #define OSSIM_TERM_H 1
11 
13 
14 #include <vector>
15 #include <cmath>
16 
17 
18 
28 };
29 
30 
31 
36 {
37 public:
38 
39 
43  virtual ~ossimTerm() {}
44 
45 
53  virtual ossim_float64 evaluate(std::vector<ossim_float64> /* point */ ) const = 0;
61  virtual ossimTerm* derivative(const ossim_uint32& variable) const = 0;
62 
63 
69  virtual ossim_uint32 getType() const = 0;
75  virtual ossimTerm* copy() const = 0;
76 
77 
85  inline ossim_float64 operator()(std::vector<ossim_float64> point) const{ return this->evaluate(point); }
86 
87 
95  inline ossimTerm* operator+(ossimTerm* rhs) const;
103  inline ossimTerm* operator*(ossimTerm* rhs) const;
104 
105 };
106 
107 
108 
113 public:
114 
115 
123  ossimMonom(const ossim_float64& coeffient, ossimTerm* variable, const ossim_float64& exponential) : coef(coeffient), var(variable), exp(exponential) {}
129  ossimMonom(const ossimMonom& src) : coef(src.coef), var(src.var->copy()), exp(src.exp) {}
133  ~ossimMonom() { delete var; }
134 
135 
143  ossim_float64 evaluate(std::vector<ossim_float64> point) const { return (coef * pow(var->evaluate(point), exp)); }
151  ossimTerm* derivative(const ossim_uint32& variable) const;
152 
153 
165  ossimTerm* copy() const;
166 
167 private:
168  ossim_float64 coef; // The coefficent of the monomial
169  ossimTerm* var; // The variable number of the monomial (starts at 0 - n)
170  ossim_float64 exp; // The exponenent of the monomial
171 
172 };
173 
174 
175 
180 public:
181 
182 
189  ossimPolynomial(ossimTerm* leftTerm, ossimTerm* rightTerm) : lTerm(leftTerm), rTerm(rightTerm) {}
195  ossimPolynomial(const ossimPolynomial& src) : lTerm(src.lTerm->copy()), rTerm(src.rTerm->copy()) {}
199  ~ossimPolynomial() { delete lTerm; delete rTerm; }
200 
201 
209  ossim_float64 evaluate(std::vector<ossim_float64> point) const { return lTerm->evaluate(point) + rTerm->evaluate(point); }
217  ossimTerm* derivative(const ossim_uint32& variable) const;
218 
219 
231  ossimTerm* copy() const;
232 
233 private:
234  ossimTerm* lTerm; // The left term of the polynomial
235  ossimTerm* rTerm; // The right term of the polynomial
236 
237 };
238 
239 
240 
245 public:
246 
247 
254  ossimProd(ossimTerm* leftTerm, ossimTerm* rightTerm) : lTerm(leftTerm), rTerm(rightTerm) {}
260  ossimProd(const ossimProd& src) : lTerm(src.lTerm->copy()), rTerm(src.rTerm->copy()) {}
264  ~ossimProd() { delete lTerm; delete rTerm; }
265 
266 
274  ossim_float64 evaluate(std::vector<ossim_float64> point) const { return lTerm->evaluate(point) * rTerm->evaluate(point); }
282  ossimTerm* derivative(const ossim_uint32& variable) const;
283 
284 
296  ossimTerm* copy() const;
297 
298 private:
299  ossimTerm* lTerm; // The left term of the product
300  ossimTerm* rTerm; // The right term of the product
301 
302 };
303 
304 
305 
310 public:
311 
312 
324  ossimVar(const ossimVar& src) : var(src.var) {}
329 
330 
338  ossim_float64 evaluate(std::vector<ossim_float64> point) const{ return point[var]; }
346  ossimTerm* derivative(const ossim_uint32& variable) const;
347 
348 
360  ossimTerm* copy() const;
361 
362 private:
363  ossim_uint32 var; // The number of the variable (0-n)
364 
365 };
366 
367 
368 
373 {
374 public:
375 
376 
382 ossimConst(const ossim_float64& value) : val(value) {}
388 ossimConst(const ossimConst& src) : val(src.val) {}
393 
394 
402  ossim_float64 evaluate(std::vector<ossim_float64> /* point */ ) const{ return val; }
410  ossimTerm* derivative(const ossim_uint32& variable) const;
411 
412 
424  ossimTerm* copy() const;
425 
426 private:
427  ossim_float64 val; // The value of the constant
428 
429 };
430 
431 #endif // OSSIM_TERM_H
ossimPolynomial(const ossimPolynomial &src)
Public Copy Constructor.
Definition: ossimTerm.h:195
ossim_uint32 getType() const
Gets the type of a polynomial.
Definition: ossimTerm.h:225
ossim_float64 evaluate(std::vector< ossim_float64 > point) const
Evaluates a variable for a point.
Definition: ossimTerm.h:338
~ossimPolynomial()
Destroys the polynomial.
Definition: ossimTerm.h:199
An abstract class to containing a multivariable function.
Definition: ossimTerm.h:35
ossim_uint32 getType() const
Gets the type of a constant.
Definition: ossimTerm.h:418
#define OSSIMDLLEXPORT
virtual ossimTerm * derivative(const ossim_uint32 &variable) const =0
Calculates the derivative of the term.
~ossimMonom()
Destroys the monomial.
Definition: ossimTerm.h:133
A monomial class to hold a monomial as a term.
Definition: ossimTerm.h:112
ossimVar(const ossim_uint32 &variable)
Public Constructor.
Definition: ossimTerm.h:318
ossim_uint32 getType() const
Gets the type of a monomial.
Definition: ossimTerm.h:159
A variable class to hold a variable as a term.
Definition: ossimTerm.h:309
A polynomial class to hold a product as a term.
Definition: ossimTerm.h:244
ossimRationalNumber operator*(ossim_int32 i, ossimRationalNumber &r)
ossim_uint32 getType() const
Gets the type of a variable.
Definition: ossimTerm.h:354
ossim_float64 exp
Definition: ossimTerm.h:170
~ossimProd()
Destroys the product.
Definition: ossimTerm.h:264
double ossim_float64
ossimTerm * lTerm
Definition: ossimTerm.h:234
ossim_uint32 var
Definition: ossimTerm.h:363
ossim_float64 coef
Definition: ossimTerm.h:168
unsigned int ossim_uint32
ossimVar(const ossimVar &src)
Public Copy Constructor.
Definition: ossimTerm.h:324
ossimConst(const ossimConst &src)
Public Copy Constructor.
Definition: ossimTerm.h:388
~ossimConst()
Destroys the constant.
Definition: ossimTerm.h:392
ossimTerm * var
Definition: ossimTerm.h:169
A polynomial class to hold a polynomial as a term.
Definition: ossimTerm.h:179
~ossimVar()
Destroys the variable.
Definition: ossimTerm.h:328
ossimTerm * lTerm
Definition: ossimTerm.h:299
ossim_float64 val
Definition: ossimTerm.h:427
A constant class to hold a constant as a term.
Definition: ossimTerm.h:372
ossim_float64 evaluate(std::vector< ossim_float64 >) const
Evaluates a constant for a point.
Definition: ossimTerm.h:402
ossimMonom(const ossim_float64 &coeffient, ossimTerm *variable, const ossim_float64 &exponential)
Public Constructor.
Definition: ossimTerm.h:123
termType
Mathematical term data structure for ossim.
Definition: ossimTerm.h:22
ossimPolynomial(ossimTerm *leftTerm, ossimTerm *rightTerm)
Public Constructor.
Definition: ossimTerm.h:189
ossim_float64 evaluate(std::vector< ossim_float64 > point) const
Evaluates a product for a point.
Definition: ossimTerm.h:274
ossimMonom(const ossimMonom &src)
Public Copy Constructor.
Definition: ossimTerm.h:129
ossimTerm * rTerm
Definition: ossimTerm.h:300
ossim_float64 operator()(std::vector< ossim_float64 > point) const
Evaluates the function for a point.
Definition: ossimTerm.h:85
ossimConst(const ossim_float64 &value)
Public Constructor.
Definition: ossimTerm.h:382
ossimProd(const ossimProd &src)
Public Copy Constructor.
Definition: ossimTerm.h:260
virtual ossimTerm * copy() const =0
Returns a pointer to a copy of the term.
ossimProd(ossimTerm *leftTerm, ossimTerm *rightTerm)
Public Constructor.
Definition: ossimTerm.h:254
ossimRationalNumber operator+(ossim_int32 i, ossimRationalNumber &r)
virtual ~ossimTerm()
Virtual destructor for destroying tree from the top node.
Definition: ossimTerm.h:43
ossim_float64 evaluate(std::vector< ossim_float64 > point) const
Evaluates a monomial for a point.
Definition: ossimTerm.h:143
ossimTerm * rTerm
Definition: ossimTerm.h:235
ossim_uint32 getType() const
Gets the type of a product.
Definition: ossimTerm.h:290
ossim_float64 evaluate(std::vector< ossim_float64 > point) const
Evaluates a polynomial for a point.
Definition: ossimTerm.h:209