InputGeneratorSinus.hpp

Go to the documentation of this file.
00001 #ifndef __INPUTGENERATORSINUS_H
00002 #define __INPUTGENERATORSINUS_H
00003 
00004 #include "IInputGenerator.hpp"
00005 #include <cmath>
00006 #include <iostream>
00007 
00012 class InputGeneratorSinus : public IInputGenerator
00013 {
00014 public: 
00015   static const double PI;
00016   
00017 public: 
00018   InputGeneratorSinus(unsigned int nofPoints, double start, double end)
00019   {
00020     m_deltaX = (end - start) / ((double)nofPoints-1.0);
00021     m_start = start;
00022     m_end = end;
00023     
00024     for(double i=start; i<=end; i+=m_deltaX)
00025     {
00026       double sinVal = sin(i);
00027       m_sin.push_back( sinVal );
00028       m_x.push_back(i);
00029       //std::cout << i << " " << sinVal << endl;
00030     }
00031 
00032     m_dimension = 1;
00033     m_input.push_back(0.0);
00034     m_output.push_back(0.0);
00035   }
00036 
00040   virtual Vector GetInput()
00041   {    
00042     unsigned int index = (unsigned int)(Random::RandomizePositive() * (double)m_sin.size());
00043     if(index == m_sin.size()) index--;
00044     
00045     m_input[0] = m_x[index];
00046     m_output[0] = m_sin[index];
00047 
00048     return m_input;
00049   }
00050     
00054   virtual Vector GetOutput()
00055   {
00056     return m_output;
00057   }
00058 
00062   virtual Vector const & GetLastInput() const { return m_input; }  
00063 
00067   virtual unsigned int GetDimension() const { return m_dimension; }
00068 
00072   virtual GeneratorType GetGeneratorType() const { return FunctionGenerator; }
00073 
00077   virtual Vector const & GetXValues() const { return m_x; }
00078 
00079 
00080   virtual double GetStart() const { return m_start; }
00081   virtual double GetEnd() const { return m_end; }
00082     
00083 
00084 protected:
00085   unsigned int m_dimension;
00086   Vector m_sin;
00087   Vector m_x;
00088   double m_start;
00089   double m_end;
00090   double m_deltaX;
00091   Vector m_input;  
00092 };
00093 
00094 const double InputGeneratorSinus::PI = 3.14159265358979;
00095 
00099 class InputRepresentationSinus : public IGLInputRepresentation
00100 {
00101 public:
00102   InputRepresentationSinus(InputGeneratorSinus * i) : m_inputGenerator(*i) {}
00103     ~InputRepresentationSinus() {}
00104 
00105   virtual void GLOutputDistribution() const
00106   {
00107     Vector const & v = m_inputGenerator.GetXValues();
00108         
00109     glBegin(GL_POINTS);
00110     {
00111       for(unsigned int i=0; i<v.size(); i++)
00112         glVertex2d(v[i], 0);
00113     }    
00114     glEnd();
00115   }
00116   
00117   virtual void GLOutputSignal() const 
00118   {    
00119     Vector const & v = m_inputGenerator.GetLastInput();
00120     glBegin(GL_POINTS);
00121     {           
00122       glVertex2d(v[0],0.0);
00123     }    
00124     glEnd();
00125   }
00126 
00131   virtual double GetDisplayXMax() { return m_inputGenerator.GetEnd(); }  
00132   virtual double GetDisplayYMax() { return 0.5; }  
00133   virtual double GetDisplayXMin() { return m_inputGenerator.GetStart(); }  
00134   virtual double GetDisplayYMin() { return -0.5; }  
00135 
00136   
00137 private:
00138   InputGeneratorSinus & m_inputGenerator;
00139 };
00140 
00141 
00142 #endif

Generated on Mon Mar 22 16:40:48 2004 for GNG_GL by doxygen 1.3.6