1/*****************************************************************************
2
3 OscSinCos.hpp
4 Copyright (c) 2005 Laurent de Soras
5
6--- Legal stuff ---
7
8This library is free software; you can redistribute it and/or
9modify it under the terms of the GNU Lesser General Public
10License as published by the Free Software Foundation; either
11version 2.1 of the License, or (at your option) any later version.
12
13This library is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16Lesser General Public License for more details.
17
18You should have received a copy of the GNU Lesser General Public
19License along with this library; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22*Tab=3***********************************************************************/
23
24
25
26#if defined (OscSinCos_CURRENT_CODEHEADER)
27 #error Recursive inclusion of OscSinCos code header.
28#endif
29#define OscSinCos_CURRENT_CODEHEADER
30
31#if ! defined (OscSinCos_CODEHEADER_INCLUDED)
32#define OscSinCos_CODEHEADER_INCLUDED
33
34
35
36/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
37
38#include <cmath>
39
40namespace std { }
41
42
43
44/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
45
46
47
48template <class T>
49OscSinCos <T>::OscSinCos ()
50: _pos_cos (1)
51, _pos_sin (0)
52, _step_cos (1)
53, _step_sin (0)
54{
55 // Nothing
56}
57
58
59
60template <class T>
61void OscSinCos <T>::set_step (double angle_rad)
62{
63 using namespace std;
64
65 _step_cos = static_cast <DataType> (cos (x: angle_rad));
66 _step_sin = static_cast <DataType> (sin (x: angle_rad));
67}
68
69
70
71template <class T>
72typename OscSinCos <T>::DataType OscSinCos <T>::get_cos () const
73{
74 return (_pos_cos);
75}
76
77
78
79template <class T>
80typename OscSinCos <T>::DataType OscSinCos <T>::get_sin () const
81{
82 return (_pos_sin);
83}
84
85
86
87template <class T>
88void OscSinCos <T>::step ()
89{
90 const DataType old_cos = _pos_cos;
91 const DataType old_sin = _pos_sin;
92
93 _pos_cos = old_cos * _step_cos - old_sin * _step_sin;
94 _pos_sin = old_cos * _step_sin + old_sin * _step_cos;
95}
96
97
98
99template <class T>
100void OscSinCos <T>::clear_buffers ()
101{
102 _pos_cos = static_cast <DataType> (1);
103 _pos_sin = static_cast <DataType> (0);
104}
105
106
107
108/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
109
110
111
112/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
113
114
115
116#endif // OscSinCos_CODEHEADER_INCLUDED
117
118#undef OscSinCos_CURRENT_CODEHEADER
119
120
121
122/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
123

source code of qtmultimedia/examples/multimedia/spectrum/3rdparty/fftreal/OscSinCos.hpp