]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/kernel/include/gslobj.hxx
Support #1768 CREATIS Licence insertion
[creaMaracasVisu.git] / lib / maracasVisuLib / src / kernel / include / gslobj.hxx
1 /*# ---------------------------------------------------------------------
2 #
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
4 #                        pour la Sant�)
5 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
6 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
7 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
8 #
9 #  This software is governed by the CeCILL-B license under French law and
10 #  abiding by the rules of distribution of free software. You can  use,
11 #  modify and/ or redistribute the software under the terms of the CeCILL-B
12 #  license as circulated by CEA, CNRS and INRIA at the following URL
13 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
14 #  or in the file LICENSE.txt.
15 #
16 #  As a counterpart to the access to the source code and  rights to copy,
17 #  modify and redistribute granted by the license, users are provided only
18 #  with a limited warranty  and the software's author,  the holder of the
19 #  economic rights,  and the successive licensors  have only  limited
20 #  liability.
21 #
22 #  The fact that you are presently reading this means that you have had
23 #  knowledge of the CeCILL-B license and that you accept its terms.
24 # ------------------------------------------------------------------------ */
25
26 /*=========================================================================
27
28   Program:   wxMaracas
29   Module:    $RCSfile: gslobj.hxx,v $
30   Language:  C++
31   Date:      $Date: 2012/11/15 14:15:31 $
32   Version:   $Revision: 1.2 $
33
34   Copyright: (c) 2002, 2003
35   License:
36   
37      This software is distributed WITHOUT ANY WARRANTY; without even 
38      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
39      PURPOSE.  See the above copyright notice for more information.
40
41 =========================================================================*/
42
43 #ifndef __GSL__OBJ__HXX__
44 #define __GSL__OBJ__HXX__
45
46 #include <iostream>
47 #include <gsl/gsl_math.h>
48 #include <gsl/gsl_matrix.h>
49
50 /*======================================================================================*/
51 /*=================================gslobj_vector========================================*/
52 /*======================================================================================*/
53 class gslobj_vector {
54
55     public:
56 /*==Constructeurs========================================*/
57     gslobj_vector( size_t s = 3 );
58     gslobj_vector( const gslobj_vector& v );
59     gslobj_vector( double* v, size_t s );
60     gslobj_vector( gsl_vector* v );
61 /*==Destructeur========================================*/
62         ~gslobj_vector( ) { if( _copy ) gsl_vector_free( _gsl ); }
63
64 /*==Operateurs========================================*/
65     
66         /* Affectation */
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
72         /* Affichage */
73     friend std::ostream& operator<<( std::ostream& os, const gslobj_vector& v );
74
75     operator double*( ) const { return( _gsl->data ); }
76     operator gsl_vector*( ) const { return( _gsl ); }
77
78         double& operator()( size_t i ) { return( _gsl->data[ i ] ); }
79     const double& operator()( size_t i ) const
80     {
81       return( _gsl->data[ i ] );
82     }
83
84         /* Comparaison */
85     bool operator==( const gslobj_vector& o ) const;
86     bool operator!=( const gslobj_vector& o ) const
87     {
88       return( !( ( *this ) == o ) );
89     }
90
91         /* Ajout */
92     gslobj_vector operator+( const gslobj_vector& o );
93     gslobj_vector operator+( double o );
94     gslobj_vector operator+( double* o );
95     gslobj_vector operator+( gsl_vector* o );
96     gslobj_vector& operator+=( const gslobj_vector& o );
97     gslobj_vector& operator+=( double o );
98     gslobj_vector& operator+=( double* o );
99     gslobj_vector& operator+=( gsl_vector* o );
100
101         /* Suppression */
102     gslobj_vector operator-( const gslobj_vector& o );
103     gslobj_vector operator-( double o );
104     gslobj_vector operator-( double* o );
105     gslobj_vector operator-( gsl_vector* o );
106     gslobj_vector& operator-=( const gslobj_vector& o );
107     gslobj_vector& operator-=( double o );
108     gslobj_vector& operator-=( double* o );
109     gslobj_vector& operator-=( gsl_vector* o );
110
111         /* Multiplication (produit scalaire) */
112     gslobj_vector operator*( double o );
113     gslobj_vector& operator*=( double o );
114
115         /* Division (produit scalaire) */
116     gslobj_vector operator/( double o );
117     gslobj_vector& operator/=( double o );
118
119
120 /*==Methodes========================================*/
121
122 /*==PS========================================*/
123 //    /* Redimenssionnement */
124 //      void resize( size_t s );
125 //
126 //      /* cree un vecteur unitaire pour une base */
127 //    int basis( size_t i )
128 //    {
129 //      *this = ( double )0;
130 //      ( *this )( i ) = 1;
131 //      return( i );
132 //    }
133 /*==PS========================================*/
134         
135         /* Renvoie la taille du vecteur */
136     size_t size( ) const { return( _gsl->size ); }
137
138 /*==PS========================================*/    
139 //      /* Affecte  */
140 //    void setValue( size_t i, double val ) { _gsl->data[ i ] = val; }
141 //
142 //      /* Permutation d'elements */
143 //    int swap( size_t i, size_t j )
144 //    {
145 //      return( gsl_vector_swap_elements( _gsl, i, j ) );
146 //    }
147 //
148 //      /* le vecteur est "retourn�" */
149 //    int reverse( ) { return( gsl_vector_reverse( _gsl ) ); }
150 /*==PS========================================*/
151
152         /* produit scalaire */
153     double dot( const gslobj_vector& o );
154     double dot( double* o );
155     double dot( gsl_vector* o );
156         
157         /* produit vectoriel : le resultat est renvoye */
158     gslobj_vector cross( const gslobj_vector& o );
159     gslobj_vector cross( double* o );
160     gslobj_vector cross( gsl_vector* o );
161         /* produit vectoriel : le resultat est stock� dans this*/
162     int scross( const gslobj_vector& o );
163     int scross( double* o );
164     int scross( gsl_vector* o );
165
166
167         /* norme */
168
169 /*==PS========================================*/
170 //    double norm1( ); /* somme des valeurs absolues de chaque 
171 //                                       composantes du vecteur (norme discrete)*/
172 /*==PS========================================*/
173
174     double norm2( ); /* norme "normale" */
175
176         /* normalisation */
177     gslobj_vector normalize( ); /* resultat renvoy� */
178     int snormalize( ); /* resultat stock� dans this */ 
179
180     private:
181
182     gsl_vector* _gsl;
183     bool _copy;
184     gsl_vector_view _view;
185 };
186
187
188
189 /*======================================================================================*/
190 /*=================================gslobj_matrix========================================*/
191 /*======================================================================================*/
192 class gslobj_matrix {
193
194     friend std::ostream& operator<<( std::ostream& os, const gslobj_matrix& m );
195
196     public:
197
198     gslobj_matrix( size_t r = 3, size_t c = 3 );
199     gslobj_matrix( const gslobj_matrix& m );
200     gslobj_matrix( double* m, size_t r, size_t c );
201     gslobj_matrix( double* m[], size_t r, size_t c );
202     gslobj_matrix( gsl_matrix* m );
203
204 /*==PS========================================*/
205 //    void resize( size_t r, size_t c );
206 /*==PS========================================*/
207
208     ~gslobj_matrix( ) { if( _copy ) gsl_matrix_free( _gsl ); }
209
210     gslobj_matrix& operator=( const gslobj_matrix& o );
211     gslobj_matrix& operator=( double o );
212     gslobj_matrix& operator=( double* o );
213     gslobj_matrix& operator=( double* o[] );
214     gslobj_matrix& operator=( gsl_matrix* o );
215
216     operator gsl_matrix*( ) const { return( _gsl ); }
217     operator double*( ) const { return( _gsl->data ); }
218                 
219     size_t size1( ) const { return( _gsl->size1 ); }
220     size_t size2( ) const { return( _gsl->size2 ); }
221     size_t rows( ) const { return( _gsl->size1 ); }
222     size_t columns( ) const { return( _gsl->size2 ); }
223     double& operator()( size_t i, size_t j );
224     const double& operator()( size_t i, size_t j ) const;
225
226 /*==PS========================================*/
227 //    void setValue( size_t i, size_t j, double val );
228 /*==PS========================================*/
229
230     bool operator==( const gslobj_matrix& o ) const;
231     bool operator!=( const gslobj_matrix& o ) const 
232     {
233       return( !( ( *this ) == o ) );
234     }
235
236     gslobj_matrix operator+( const gslobj_matrix& o );
237     gslobj_matrix operator+( double o );
238     gslobj_matrix operator+( double* o );
239     gslobj_matrix operator+( double* o[] );
240     gslobj_matrix operator+( gsl_matrix* o );
241     gslobj_matrix& operator+=( const gslobj_matrix& o );
242     gslobj_matrix& operator+=( double o );
243     gslobj_matrix& operator+=( double* o );
244     gslobj_matrix& operator+=( double* o[] );
245     gslobj_matrix& operator+=( gsl_matrix* o );
246
247     gslobj_matrix operator-( const gslobj_matrix& o );
248     gslobj_matrix operator-( double o );
249     gslobj_matrix operator-( double* o );
250     gslobj_matrix operator-( double* o[] );
251     gslobj_matrix operator-( gsl_matrix* o );
252     gslobj_matrix& operator-=( const gslobj_matrix& o );
253     gslobj_matrix& operator-=( double o );
254     gslobj_matrix& operator-=( double* o );
255     gslobj_matrix& operator-=( double* o[] );
256     gslobj_matrix& operator-=( gsl_matrix* o );
257
258     gslobj_matrix operator*( const gslobj_matrix& o );
259     gslobj_matrix operator*( double o );
260     gslobj_matrix operator*( double* o );
261     gslobj_matrix operator*( double* o[] );
262     gslobj_matrix operator*( gsl_matrix* o );
263     gslobj_vector operator*( const gslobj_vector& o );
264     gslobj_matrix& operator*=( const gslobj_matrix& o );
265     gslobj_matrix& operator*=( double o );
266     gslobj_matrix& operator*=( double* o );
267     gslobj_matrix& operator*=( double* o[] );
268     gslobj_matrix& operator*=( gsl_matrix* o );
269
270 /*==PS========================================*/
271 //    gslobj_matrix transpose( );
272 //    gslobj_matrix invertLU( );
273 //    double determinant( );
274
275 //    bool isSquare( ) { return( _gsl->size1 == _gsl->size2 ); }
276 //    void identity( );
277 /*==PS========================================*/
278
279     private:
280
281     gsl_matrix* _gsl;
282     bool _copy;
283     gsl_matrix_view _view;
284 };
285
286 #endif // __GSL__OBJ__HXX__