OSDN Git Service

first
[psychlops/cpp.git] / psychlops / core / math / psychlops_m_function.h
1 /*
2  *  psychlops_math_function.h
3  *  Psychlops Standard Library (Universal)
4  *
5  *  Last Modified 2005/10/13 by Kenchi HOSOKAWA
6  *  (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
7  */
8
9 #ifndef HEADER_PSYCHLOPS_MATH_FUNCTION
10 #define HEADER_PSYCHLOPS_MATH_FUNCTION
11
12
13 #include "psychlops_m_util.h"
14 #include "../graphic/psychlops_g_fundamental.h"
15
16 namespace Psychlops {
17
18
19         class Wave {
20                 private:
21                 class WaveExpression_ {
22                         public:
23                         enum OP_ { ADD, SUB, MUL, DIV };
24                         Wave *next_;
25                         OP_ op_;
26
27                         WaveExpression_();
28                         ~WaveExpression_();
29                         void add(Wave &target);
30                         void remove(Wave &target);
31                 };
32 //              WaveExpression_ next_;
33
34                 public:
35                 enum BASIC_WAVE_FORM { sin, cos, tan, rect, triangle, saw };
36                 Wave();
37                 Wave(const Wave& w);
38                 virtual ~Wave();
39
40                 virtual double operator ()(double x) const = 0;
41
42         };
43
44
45         ////////        Standard Classes        ////////
46
47         namespace Waveform {
48
49                 class CONSTANT : public Wave {
50                         public:
51                         double value;
52
53                         public:
54                         CONSTANT(double val = 0.0);
55                         virtual double operator ()(double x) const;
56                         virtual double operator ()(Angle a) const;
57                 };
58                 class ZERO : public Wave {
59                         public:
60                         ZERO();
61                         virtual double operator ()(double x) const;
62                         virtual double operator ()(Angle a) const;
63                 };
64                 class ONE : public Wave {
65                         public:
66                         ONE();
67                         virtual double operator ()(double x) const;
68                         virtual double operator ()(Angle a) const;
69                 };
70
71                 class SIN : public Wave {
72                         public:
73                         double amplitude;
74                         double wavelength;
75                         Angle phase;
76
77                         public:
78                         SIN();\r
79                         SIN(const SIN &w);
80                         SIN(double lngth, double amp=1.0, Angle phs=0.0);
81                         SIN & set(double lngth, double amp=1.0, Angle phs=0.0);
82                         virtual double operator ()(double x) const;
83                         virtual double operator ()(Angle a) const;
84                 };
85
86                 class COS : public SIN {
87                         virtual double operator ()(double x) const;\r
88                         virtual double operator ()(Angle a) const;
89                 };
90
91                 class TAN : public SIN {
92                         virtual double operator ()(double x) const;\r
93                         virtual double operator ()(Angle a) const;
94                 };
95
96                 class PULSE : public Wave {
97                         public:
98                         double amplitude;
99                         double wavelength;
100                         Angle phase;
101                         Angle step_boundary_;
102
103                         public:
104                         PULSE(const PULSE &w);
105                         PULSE(double lngth, double amp=1.0, Angle phs=0.0, Angle step_boundary=180.0);
106                         PULSE & set(double lngth, double amp=1.0, Angle phs=0.0, Angle step_boundary=180.0);
107                         virtual double operator ()(double x) const;
108                         virtual double operator ()(Angle a) const;
109                 };
110
111                 class MONOMIAL : public Wave {
112                         public:
113                         int degree;
114                         double factor;
115
116                         public:
117                         MONOMIAL(const MONOMIAL &w);
118                         MONOMIAL(int dgr=1, double fct=1.0);
119                         MONOMIAL & set(int dgr=1, double fct=1.0);
120                         virtual double operator ()(double x) const;
121                 };
122
123                 class LINEAR : public MONOMIAL {
124                         public:
125                         LINEAR(double fct=1.0);
126                         LINEAR & set(double fct=1.0);
127                         virtual double operator ()(double x) const;
128                 };
129
130 /*              template <double (*X)(double)> class FUNCTION : public Wave {
131                         public:
132                         FUNCTION() {
133                         }
134                         virtual double operator ()(double x) const {
135                                 return X(x);
136                         }
137                 };
138 */
139 //              typedef FUNCTION<exp> EXP;
140 //              typedef FUNCTION<log> LOG;
141         }
142
143
144 }       /*      <- namespace Psycholops         */
145
146
147 #endif