1 /*# ---------------------------------------------------------------------
3 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
26 /*=========================================================================
29 Module: $RCSfile: gslobj.hxx,v $
31 Date: $Date: 2012/11/15 14:15:31 $
32 Version: $Revision: 1.2 $
34 Copyright: (c) 2002, 2003
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.
41 =========================================================================*/
43 #ifndef __GSL__OBJ__HXX__
44 #define __GSL__OBJ__HXX__
47 #include <gsl/gsl_math.h>
48 #include <gsl/gsl_matrix.h>
50 /*======================================================================================*/
51 /*=================================gslobj_vector========================================*/
52 /*======================================================================================*/
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 ); }
64 /*==Operateurs========================================*/
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 );
73 friend std::ostream& operator<<( std::ostream& os, const gslobj_vector& v );
75 operator double*( ) const { return( _gsl->data ); }
76 operator gsl_vector*( ) const { return( _gsl ); }
78 double& operator()( size_t i ) { return( _gsl->data[ i ] ); }
79 const double& operator()( size_t i ) const
81 return( _gsl->data[ i ] );
85 bool operator==( const gslobj_vector& o ) const;
86 bool operator!=( const gslobj_vector& o ) const
88 return( !( ( *this ) == o ) );
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 );
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 );
111 /* Multiplication (produit scalaire) */
112 gslobj_vector operator*( double o );
113 gslobj_vector& operator*=( double o );
115 /* Division (produit scalaire) */
116 gslobj_vector operator/( double o );
117 gslobj_vector& operator/=( double o );
120 /*==Methodes========================================*/
122 /*==PS========================================*/
123 // /* Redimenssionnement */
124 // void resize( size_t s );
126 // /* cree un vecteur unitaire pour une base */
127 // int basis( size_t i )
129 // *this = ( double )0;
130 // ( *this )( i ) = 1;
133 /*==PS========================================*/
135 /* Renvoie la taille du vecteur */
136 size_t size( ) const { return( _gsl->size ); }
138 /*==PS========================================*/
140 // void setValue( size_t i, double val ) { _gsl->data[ i ] = val; }
142 // /* Permutation d'elements */
143 // int swap( size_t i, size_t j )
145 // return( gsl_vector_swap_elements( _gsl, i, j ) );
148 // /* le vecteur est "retourn�" */
149 // int reverse( ) { return( gsl_vector_reverse( _gsl ) ); }
150 /*==PS========================================*/
152 /* produit scalaire */
153 double dot( const gslobj_vector& o );
154 double dot( double* o );
155 double dot( gsl_vector* o );
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 );
169 /*==PS========================================*/
170 // double norm1( ); /* somme des valeurs absolues de chaque
171 // composantes du vecteur (norme discrete)*/
172 /*==PS========================================*/
174 double norm2( ); /* norme "normale" */
177 gslobj_vector normalize( ); /* resultat renvoy� */
178 int snormalize( ); /* resultat stock� dans this */
184 gsl_vector_view _view;
189 /*======================================================================================*/
190 /*=================================gslobj_matrix========================================*/
191 /*======================================================================================*/
192 class gslobj_matrix {
194 friend std::ostream& operator<<( std::ostream& os, const gslobj_matrix& m );
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 );
204 /*==PS========================================*/
205 // void resize( size_t r, size_t c );
206 /*==PS========================================*/
208 ~gslobj_matrix( ) { if( _copy ) gsl_matrix_free( _gsl ); }
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 );
216 operator gsl_matrix*( ) const { return( _gsl ); }
217 operator double*( ) const { return( _gsl->data ); }
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;
226 /*==PS========================================*/
227 // void setValue( size_t i, size_t j, double val );
228 /*==PS========================================*/
230 bool operator==( const gslobj_matrix& o ) const;
231 bool operator!=( const gslobj_matrix& o ) const
233 return( !( ( *this ) == o ) );
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 );
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 );
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 );
270 /*==PS========================================*/
271 // gslobj_matrix transpose( );
272 // gslobj_matrix invertLU( );
273 // double determinant( );
275 // bool isSquare( ) { return( _gsl->size1 == _gsl->size2 ); }
277 /*==PS========================================*/
283 gsl_matrix_view _view;
286 #endif // __GSL__OBJ__HXX__