IBSimu
1.0.4
|
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