coordmapper.hpp

Go to the documentation of this file.
00001 
00005 /* Copyright (c) 2005-2010 Taneli Kalvas. All rights reserved.
00006  *
00007  * You can redistribute this software and/or modify it under the terms
00008  * of the GNU General Public License as published by the Free Software
00009  * Foundation; either version 2 of the License, or (at your option)
00010  * any later version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but
00013  * WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015  * General Public License for more details.
00016  * 
00017  * You should have received a copy of the GNU General Public License
00018  * along with this library (file "COPYING" included in the package);
00019  * if not, write to the Free Software Foundation, Inc., 51 Franklin
00020  * Street, Fifth Floor, Boston, MA 02110-1301 USA
00021  * 
00022  * If you have questions about your rights to use or distribute this
00023  * software, please contact Berkeley Lab's Technology Transfer
00024  * Department at TTD@lbl.gov. Other questions, comments and bug
00025  * reports should be sent directly to the author via email at
00026  * taneli.kalvas@jyu.fi.
00027  * 
00028  * NOTICE. This software was developed under partial funding from the
00029  * U.S.  Department of Energy.  As such, the U.S. Government has been
00030  * granted for itself and others acting on its behalf a paid-up,
00031  * nonexclusive, irrevocable, worldwide license in the Software to
00032  * reproduce, prepare derivative works, and perform publicly and
00033  * display publicly.  Beginning five (5) years after the date
00034  * permission to assert copyright is obtained from the U.S. Department
00035  * of Energy, and subject to any subsequent five (5) year renewals,
00036  * the U.S. Government is granted for itself and others acting on its
00037  * behalf a paid-up, nonexclusive, irrevocable, worldwide license in
00038  * the Software to reproduce, prepare derivative works, distribute
00039  * copies to the public, perform publicly and display publicly, and to
00040  * permit others to do so.
00041  */
00042 
00043 #ifndef COORDMAPPER_HPP
00044 #define COORDMAPPER_HPP 1
00045 
00046 
00047 #include <iostream>
00048 
00049 
00057 class Coordmapper1D {
00058     double _xx, _x0;   
00060 public:
00061 
00064     Coordmapper1D()
00065         : _xx(1.0), _x0(0.0) {}
00066 
00069     Coordmapper1D( double xx, double x0 )
00070         : _xx(xx), _x0(x0) {}
00071 
00074     void set_transformation( double xx, double x0 ) {
00075         _xx = xx;
00076         _x0 = x0;
00077     }
00078 
00082     void transform( double &xout, const double &xin ) const {
00083         xout = _xx * xin + _x0;
00084     }
00085 
00089     void transform( double &x ) const {
00090         x = _xx * x + _x0;
00091     }
00092 
00095     void inv_transform( double &xout, const double &xin ) const {
00096         xout = (xin-_x0) / _xx;
00097     }
00098 
00101     void inv_transform( double &x ) const {
00102         x = (x-_x0) / _xx;
00103     }
00104 
00107     void debug_print( std::ostream &os ) const {
00108         os << "**Coordmapper1D\n";
00109         os << "_xx = " << _xx << "\n";
00110         os << "_x0 = " << _x0 << "\n";
00111     }
00112 };
00113 
00114 
00115 
00119 class Coordmapper {
00120     Coordmapper1D _cmx;  
00121     Coordmapper1D _cmy;  
00123 public:
00124 
00127     Coordmapper() {}
00128 
00132     Coordmapper( Coordmapper1D cmx, Coordmapper1D cmy )
00133         : _cmx(cmx), _cmy(cmy) {}
00134 
00137     Coordmapper( double xx, double x0, double yy, double y0 )
00138         : _cmx(xx,x0), _cmy(yy,y0) {}
00139 
00142     void set_transformation( double xx, double x0, double yy, double y0 ) {
00143         _cmx.set_transformation( xx, x0 );
00144         _cmy.set_transformation( yy, y0 );
00145     }
00146 
00149     void transform( double &x, double &y ) const {
00150         _cmx.transform( x );
00151         _cmy.transform( y );
00152     }
00153 
00157     void transform( double *xout, const double *xin ) const {
00158         _cmx.transform( xout[0], xin[0] );
00159         _cmy.transform( xout[1], xin[1] );
00160     }
00161 
00164     void inv_transform( double &x, double &y ) const {
00165         _cmx.inv_transform( x );
00166         _cmy.inv_transform( y );
00167     }
00168 
00172     void inv_transform( double *xout, const double *xin ) const {
00173         _cmx.inv_transform( xout[0], xin[0] );
00174         _cmy.inv_transform( xout[1], xin[1] );
00175     }
00176 
00177 };
00178 
00179 
00180 #endif
00181 
00182 
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200 

Generated on Thu Apr 21 13:39:59 2011 for IBSimu by  doxygen 1.4.7