]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/kernel/gslobj.hxx
creaMaracasVisu Library
[creaMaracasVisu.git] / lib / maracasVisuLib / src / kernel / gslobj.hxx
1 /*=========================================================================
2
3   Program:   wxMaracas
4   Module:    $RCSfile: gslobj.hxx,v $
5   Language:  C++
6   Date:      $Date: 2008/10/31 16:32:54 $
7   Version:   $Revision: 1.1 $
8
9   Copyright: (c) 2002, 2003
10   License:
11   
12      This software is distributed WITHOUT ANY WARRANTY; without even 
13      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14      PURPOSE.  See the above copyright notice for more information.
15
16 =========================================================================*/
17
18 #ifndef __GSL__OBJ__HXX__
19 #define __GSL__OBJ__HXX__
20
21 #include <iostream>
22 #include <gsl/gsl_math.h>
23 #include <gsl/gsl_matrix.h>
24
25 /*======================================================================================*/
26 /*=================================gslobj_vector========================================*/
27 /*======================================================================================*/
28 class gslobj_vector {
29
30     public:
31 /*==Constructeurs========================================*/
32     gslobj_vector( size_t s = 3 );
33     gslobj_vector( const gslobj_vector& v );
34     gslobj_vector( double* v, size_t s );
35     gslobj_vector( gsl_vector* v );
36 /*==Destructeur========================================*/
37         ~gslobj_vector( ) { if( _copy ) gsl_vector_free( _gsl ); }
38
39 /*==Operateurs========================================*/
40     
41         /* Affectation */
42         gslobj_vector& operator=( const gslobj_vector& o );
43     gslobj_vector& operator=( double o );
44     gslobj_vector& operator=( double* o );
45     gslobj_vector& operator=( gsl_vector* o );
46
47         /* Affichage */
48     friend std::ostream& operator<<( std::ostream& os, const gslobj_vector& v );
49
50     operator double*( ) const { return( _gsl->data ); }
51     operator gsl_vector*( ) const { return( _gsl ); }
52
53         double& operator()( size_t i ) { return( _gsl->data[ i ] ); }
54     const double& operator()( size_t i ) const
55     {
56       return( _gsl->data[ i ] );
57     }
58
59         /* Comparaison */
60     bool operator==( const gslobj_vector& o ) const;
61     bool operator!=( const gslobj_vector& o ) const
62     {
63       return( !( ( *this ) == o ) );
64     }
65
66         /* Ajout */
67     gslobj_vector operator+( const gslobj_vector& o );
68     gslobj_vector operator+( double o );
69     gslobj_vector operator+( double* o );
70     gslobj_vector operator+( gsl_vector* o );
71     gslobj_vector& operator+=( const gslobj_vector& o );
72     gslobj_vector& operator+=( double o );
73     gslobj_vector& operator+=( double* o );
74     gslobj_vector& operator+=( gsl_vector* o );
75
76         /* Suppression */
77     gslobj_vector operator-( const gslobj_vector& o );
78     gslobj_vector operator-( double o );
79     gslobj_vector operator-( double* o );
80     gslobj_vector operator-( gsl_vector* o );
81     gslobj_vector& operator-=( const gslobj_vector& o );
82     gslobj_vector& operator-=( double o );
83     gslobj_vector& operator-=( double* o );
84     gslobj_vector& operator-=( gsl_vector* o );
85
86         /* Multiplication (produit scalaire) */
87     gslobj_vector operator*( double o );
88     gslobj_vector& operator*=( double o );
89
90         /* Division (produit scalaire) */
91     gslobj_vector operator/( double o );
92     gslobj_vector& operator/=( double o );
93
94
95 /*==Methodes========================================*/
96
97 /*==PS========================================*/
98 //    /* Redimenssionnement */
99 //      void resize( size_t s );
100 //
101 //      /* cree un vecteur unitaire pour une base */
102 //    int basis( size_t i )
103 //    {
104 //      *this = ( double )0;
105 //      ( *this )( i ) = 1;
106 //      return( i );
107 //    }
108 /*==PS========================================*/
109         
110         /* Renvoie la taille du vecteur */
111     size_t size( ) const { return( _gsl->size ); }
112
113 /*==PS========================================*/    
114 //      /* Affecte  */
115 //    void setValue( size_t i, double val ) { _gsl->data[ i ] = val; }
116 //
117 //      /* Permutation d'elements */
118 //    int swap( size_t i, size_t j )
119 //    {
120 //      return( gsl_vector_swap_elements( _gsl, i, j ) );
121 //    }
122 //
123 //      /* le vecteur est "retourné" */
124 //    int reverse( ) { return( gsl_vector_reverse( _gsl ) ); }
125 /*==PS========================================*/
126
127         /* produit scalaire */
128     double dot( const gslobj_vector& o );
129     double dot( double* o );
130     double dot( gsl_vector* o );
131         
132         /* produit vectoriel : le resultat est renvoye */
133     gslobj_vector cross( const gslobj_vector& o );
134     gslobj_vector cross( double* o );
135     gslobj_vector cross( gsl_vector* o );
136         /* produit vectoriel : le resultat est stocké dans this*/
137     int scross( const gslobj_vector& o );
138     int scross( double* o );
139     int scross( gsl_vector* o );
140
141
142         /* norme */
143
144 /*==PS========================================*/
145 //    double norm1( ); /* somme des valeurs absolues de chaque 
146 //                                       composantes du vecteur (norme discrete)*/
147 /*==PS========================================*/
148
149     double norm2( ); /* norme "normale" */
150
151         /* normalisation */
152     gslobj_vector normalize( ); /* resultat renvoyé */
153     int snormalize( ); /* resultat stocké dans this */ 
154
155     private:
156
157     gsl_vector* _gsl;
158     bool _copy;
159     gsl_vector_view _view;
160 };
161
162
163
164 /*======================================================================================*/
165 /*=================================gslobj_matrix========================================*/
166 /*======================================================================================*/
167 class gslobj_matrix {
168
169     friend std::ostream& operator<<( std::ostream& os, const gslobj_matrix& m );
170
171     public:
172
173     gslobj_matrix( size_t r = 3, size_t c = 3 );
174     gslobj_matrix( const gslobj_matrix& m );
175     gslobj_matrix( double* m, size_t r, size_t c );
176     gslobj_matrix( double* m[], size_t r, size_t c );
177     gslobj_matrix( gsl_matrix* m );
178
179 /*==PS========================================*/
180 //    void resize( size_t r, size_t c );
181 /*==PS========================================*/
182
183     ~gslobj_matrix( ) { if( _copy ) gsl_matrix_free( _gsl ); }
184
185     gslobj_matrix& operator=( const gslobj_matrix& o );
186     gslobj_matrix& operator=( double o );
187     gslobj_matrix& operator=( double* o );
188     gslobj_matrix& operator=( double* o[] );
189     gslobj_matrix& operator=( gsl_matrix* o );
190
191     operator gsl_matrix*( ) const { return( _gsl ); }
192     operator double*( ) const { return( _gsl->data ); }
193                 
194     size_t size1( ) const { return( _gsl->size1 ); }
195     size_t size2( ) const { return( _gsl->size2 ); }
196     size_t rows( ) const { return( _gsl->size1 ); }
197     size_t columns( ) const { return( _gsl->size2 ); }
198     double& operator()( size_t i, size_t j );
199     const double& operator()( size_t i, size_t j ) const;
200
201 /*==PS========================================*/
202 //    void setValue( size_t i, size_t j, double val );
203 /*==PS========================================*/
204
205     bool operator==( const gslobj_matrix& o ) const;
206     bool operator!=( const gslobj_matrix& o ) const 
207     {
208       return( !( ( *this ) == o ) );
209     }
210
211     gslobj_matrix operator+( const gslobj_matrix& o );
212     gslobj_matrix operator+( double o );
213     gslobj_matrix operator+( double* o );
214     gslobj_matrix operator+( double* o[] );
215     gslobj_matrix operator+( gsl_matrix* o );
216     gslobj_matrix& operator+=( const gslobj_matrix& o );
217     gslobj_matrix& operator+=( double o );
218     gslobj_matrix& operator+=( double* o );
219     gslobj_matrix& operator+=( double* o[] );
220     gslobj_matrix& operator+=( gsl_matrix* o );
221
222     gslobj_matrix operator-( const gslobj_matrix& o );
223     gslobj_matrix operator-( double o );
224     gslobj_matrix operator-( double* o );
225     gslobj_matrix operator-( double* o[] );
226     gslobj_matrix operator-( gsl_matrix* o );
227     gslobj_matrix& operator-=( const gslobj_matrix& o );
228     gslobj_matrix& operator-=( double o );
229     gslobj_matrix& operator-=( double* o );
230     gslobj_matrix& operator-=( double* o[] );
231     gslobj_matrix& operator-=( gsl_matrix* o );
232
233     gslobj_matrix operator*( const gslobj_matrix& o );
234     gslobj_matrix operator*( double o );
235     gslobj_matrix operator*( double* o );
236     gslobj_matrix operator*( double* o[] );
237     gslobj_matrix operator*( gsl_matrix* o );
238     gslobj_vector operator*( const gslobj_vector& o );
239     gslobj_matrix& operator*=( const gslobj_matrix& o );
240     gslobj_matrix& operator*=( double o );
241     gslobj_matrix& operator*=( double* o );
242     gslobj_matrix& operator*=( double* o[] );
243     gslobj_matrix& operator*=( gsl_matrix* o );
244
245 /*==PS========================================*/
246 //    gslobj_matrix transpose( );
247 //    gslobj_matrix invertLU( );
248 //    double determinant( );
249
250 //    bool isSquare( ) { return( _gsl->size1 == _gsl->size2 ); }
251 //    void identity( );
252 /*==PS========================================*/
253
254     private:
255
256     gsl_matrix* _gsl;
257     bool _copy;
258     gsl_matrix_view _view;
259 };
260
261 #endif // __GSL__OBJ__HXX__