1 /* =======================================================================
2 * @author: Leonardo Florez-Valencia
3 * @email: florez-l@javeriana.edu.co
4 * =======================================================================
6 #ifndef __FourierSeries__hxx__
7 #define __FourierSeries__hxx__
9 // -------------------------------------------------------------------------
10 template< class S, unsigned int D >
11 template< class S2, unsigned int D2 >
12 FourierSeries< S, D >::
13 FourierSeries( const FourierSeries< S2, D2 >& o )
14 : m_RealAxis( D - 2 ),
17 int q = o.GetNumberOfHarmonics( );
18 this->SetNumberOfHarmonics( q );
19 for( int l = -q; l <= q; ++l )
21 TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) );
24 // -------------------------------------------------------------------------
25 template< class S, unsigned int D >
26 template< class _TIt >
27 FourierSeries< S, D >::
28 FourierSeries( const _TIt& b, const _TIt& e, unsigned int q )
29 : m_RealAxis( D - 2 ),
32 std::vector< TComplex > aux;
33 for( _TIt it = b; it != e; ++it )
34 aux.push_back( TComplex( S( ( *it )[ 0 ] ), S( ( *it )[ 1 ] ) ) );
38 // -------------------------------------------------------------------------
39 template< class S, unsigned int D >
40 template< class S2, unsigned int D2 >
41 typename FourierSeries< S, D >::
42 Self& FourierSeries< S, D >::
43 operator=( const FourierSeries< S2, D2 >& o )
47 this->m_RealAxis = o.GetRealAxis( );
48 this->m_ImagAxis = o.GetImagAxis( );
52 this->m_RealAxis = D - 2;
53 this->m_ImagAxis = D - 1;
56 int q = o.GetNumberOfHarmonics( );
57 this->SetNumberOfHarmonics( q );
58 for( int l = -q; l <= q; ++l )
60 TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) );
64 // -------------------------------------------------------------------------
65 template< class S, unsigned int D >
66 template< class _TOtherScalar >
67 void FourierSeries< S, D >::
68 SetEllipses( const std::vector< _TOtherScalar >& ellipses )
70 int Q = ( ellipses.size( ) - 2 ) >> 2;
72 this->SetNumberOfHarmonics( Q );
73 auto cIt = ellipses.begin( );
74 S cx = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
75 if( cIt != ellipses.end( ) )
77 S cy = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
78 if( cIt != ellipses.end( ) )
80 ( *this )[ 0 ] = TComplex( cx, cy );
81 for( int l = 1; l <= Q; ++l )
83 S a = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
84 if( cIt != ellipses.end( ) )
86 S b = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
87 if( cIt != ellipses.end( ) )
89 S t = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
90 if( cIt != ellipses.end( ) )
92 S p = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
93 if( cIt != ellipses.end( ) )
95 this->SetEllipse( l, a, b, t, p );
100 #endif // __FourierSeries__hxx__