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