]> Creatis software - FrontAlgorithms.git/blob - appli/CTArteries/FourierSeries.hxx
...
[FrontAlgorithms.git] / appli / CTArteries / FourierSeries.hxx
1 /* =======================================================================
2  * @author: Leonardo Florez-Valencia
3  * @email: florez-l@javeriana.edu.co
4  * =======================================================================
5  */
6 #ifndef __FourierSeries__hxx__
7 #define __FourierSeries__hxx__
8
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 ),
15     m_ImagAxis( D - 1 )
16 {
17   int q = o.GetNumberOfHarmonics( );
18   this->SetNumberOfHarmonics( q );
19   for( int l = -q; l <= q; ++l )
20     ( *this )[ l ] =
21       TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) );
22 }
23
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 ),
30     m_ImagAxis( D - 1 )
31 {
32   std::vector< TComplex > aux;
33   for( _TIt it = b; it != e; ++it )
34     aux.push_back( TComplex( S( ( *it )[ 0 ] ), S( ( *it )[ 1 ] ) ) );
35   this->_DFT( aux, q );
36 }
37
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 )
44 {
45   if( D == D2 )
46   {
47     this->m_RealAxis = o.GetRealAxis( );
48     this->m_ImagAxis = o.GetImagAxis( );
49   }
50   else
51   {
52     this->m_RealAxis = D - 2;
53     this->m_ImagAxis = D - 1;
54
55   } // fi
56   int q = o.GetNumberOfHarmonics( );
57   this->SetNumberOfHarmonics( q );
58   for( int l = -q; l <= q; ++l )
59     ( *this )[ l ] =
60       TComplex( S( std::real( o[ l ] ) ), S( std::imag( o[ l ] ) ) );
61   return( *this );
62 }
63
64 // -------------------------------------------------------------------------
65 template< class S, unsigned int D >
66 template< class _TOtherScalar >
67 void FourierSeries< S, D >::
68 SetEllipses( const std::vector< _TOtherScalar >& ellipses )
69 {
70   int Q = ( ellipses.size( ) - 2 ) >> 2;
71   Q = ( Q < 1 )? 1: Q;
72   this->SetNumberOfHarmonics( Q );
73   auto cIt = ellipses.begin( );
74   S cx = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
75   if( cIt != ellipses.end( ) )
76     ++cIt;
77   S cy = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
78   if( cIt != ellipses.end( ) )
79     ++cIt;
80   ( *this )[ 0 ] = TComplex( cx, cy );
81   for( int l = 1; l <= Q; ++l )
82   {
83     S a = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
84     if( cIt != ellipses.end( ) )
85       ++cIt;
86     S b = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
87     if( cIt != ellipses.end( ) )
88       ++cIt;
89     S t = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
90     if( cIt != ellipses.end( ) )
91       ++cIt;
92     S p = ( cIt != ellipses.end( ) )? *cIt: S( 0 );
93     if( cIt != ellipses.end( ) )
94       ++cIt;
95     this->SetEllipse( l, a, b, t, p );
96
97   } // rof
98 }
99
100 #endif // __FourierSeries__hxx__
101
102 // eof - $RCSfile$