/* ======================================================================= * @author: Leonardo Florez-Valencia * @email: florez-l@javeriana.edu.co * ======================================================================= */ #ifndef __FourierSeries__hxx__ #define __FourierSeries__hxx__ // ------------------------------------------------------------------------- template< class S, unsigned int D > template< class S2, unsigned int D2 > FourierSeries< S, D >:: FourierSeries( const FourierSeries< S2, D2 >& o ) : m_RealAxis( D - 2 ), m_ImagAxis( D - 1 ) { int q = o.GetNumberOfHarmonics( ); this->SetNumberOfHarmonics( q ); for( int l = -q; l <= q; ++l ) ( *this )[ l ] = TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) ); } // ------------------------------------------------------------------------- template< class S, unsigned int D > template< class _TIt > FourierSeries< S, D >:: FourierSeries( const _TIt& b, const _TIt& e, unsigned int q ) : m_RealAxis( D - 2 ), m_ImagAxis( D - 1 ) { std::vector< TComplex > aux; for( _TIt it = b; it != e; ++it ) aux.push_back( TComplex( S( ( *it )[ 0 ] ), S( ( *it )[ 1 ] ) ) ); this->_DFT( aux, q ); } // ------------------------------------------------------------------------- template< class S, unsigned int D > template< class S2, unsigned int D2 > typename FourierSeries< S, D >:: Self& FourierSeries< S, D >:: operator=( const FourierSeries< S2, D2 >& o ) { if( D == D2 ) { this->m_RealAxis = o.GetRealAxis( ); this->m_ImagAxis = o.GetImagAxis( ); } else { this->m_RealAxis = D - 2; this->m_ImagAxis = D - 1; } // fi int q = o.GetNumberOfHarmonics( ); this->SetNumberOfHarmonics( q ); for( int l = -q; l <= q; ++l ) ( *this )[ l ] = TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) ); return( *this ); } // ------------------------------------------------------------------------- template< class S, unsigned int D > template< class _TOtherScalar > void FourierSeries< S, D >:: SetEllipses( const std::vector< _TOtherScalar >& ellipses ) { int Q = ( ellipses.size( ) - 2 ) >> 2; Q = ( Q < 1 )? 1: Q; this->SetNumberOfHarmonics( Q ); auto cIt = ellipses.begin( ); S cx = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; S cy = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; ( *this )[ 0 ] = TComplex( cx, cy ); for( int l = 1; l <= Q; ++l ) { S a = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; S b = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; S t = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; S p = ( cIt != ellipses.end( ) )? *cIt: S( 0 ); if( cIt != ellipses.end( ) ) ++cIt; this->SetEllipse( l, a, b, t, p ); } // rof } #endif // __FourierSeries__hxx__ // eof - $RCSfile$