2 * psychlops_math_function.h
3 * Psychlops Standard Library (Universal)
5 * Last Modified 2005/10/13 by Kenchi HOSOKAWA
6 * (C) 2005 Kenchi HOSOKAWA, Kazushi MARUYA, Takao SATO
9 #ifndef HEADER_PSYCHLOPS_MATH_FUNCTION
10 #define HEADER_PSYCHLOPS_MATH_FUNCTION
13 #include "psychlops_m_util.h"
14 #include "../graphic/psychlops_g_fundamental.h"
21 class WaveExpression_ {
23 enum OP_ { ADD, SUB, MUL, DIV };
29 void add(Wave &target);
30 void remove(Wave &target);
32 // WaveExpression_ next_;
35 enum BASIC_WAVE_FORM { sin, cos, tan, rect, triangle, saw };
40 virtual double operator ()(double x) const = 0;
45 //////// Standard Classes ////////
49 class CONSTANT : public Wave {
54 CONSTANT(double val = 0.0);
55 virtual double operator ()(double x) const;
56 virtual double operator ()(Angle a) const;
58 class ZERO : public Wave {
61 virtual double operator ()(double x) const;
62 virtual double operator ()(Angle a) const;
64 class ONE : public Wave {
67 virtual double operator ()(double x) const;
68 virtual double operator ()(Angle a) const;
71 class SIN : public Wave {
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;
86 class COS : public SIN {
87 virtual double operator ()(double x) const;
\r
88 virtual double operator ()(Angle a) const;
91 class TAN : public SIN {
92 virtual double operator ()(double x) const;
\r
93 virtual double operator ()(Angle a) const;
96 class PULSE : public Wave {
101 Angle step_boundary_;
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;
111 class MONOMIAL : public Wave {
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;
123 class LINEAR : public MONOMIAL {
125 LINEAR(double fct=1.0);
126 LINEAR & set(double fct=1.0);
127 virtual double operator ()(double x) const;
130 /* template <double (*X)(double)> class FUNCTION : public Wave {
134 virtual double operator ()(double x) const {
139 // typedef FUNCTION<exp> EXP;
140 // typedef FUNCTION<log> LOG;
144 } /* <- namespace Psycholops */