Go to the documentation of this file.00001 #ifndef Trapezoid2RectangleMappingX_h
00002 #define Trapezoid2RectangleMappingX_h
00003
00016
00017
00018 #ifdef DEBUG_GRID_TRM
00019 #include <iostream>
00020 #endif
00021
00022 class Trapezoid2RectangleMappingX {
00023 public:
00024
00025 Trapezoid2RectangleMappingX() {}
00026
00028 Trapezoid2RectangleMappingX( double x0, double y0, double bovera, double h) :
00029 x0_(x0), y0_(y0), parallel_(false)
00030 {
00031 k_ = 2/h * (bovera-1.) / (bovera+1.);
00032
00033 #ifdef DEBUG_GRID_TRM
00034 std::cout << "Trapezoid2RectangleMappingX constructed with x0,y0 " << x0 << " " << y0
00035 << " b/a= " << bovera << " h= " << h << std::endl;
00036 #endif
00037 }
00038
00040 Trapezoid2RectangleMappingX( double x0, double y0, double k) :
00041 x0_(x0), y0_(y0), k_(k), parallel_(true)
00042 {
00043 #ifdef DEBUG_GRID_TRM
00044 std::cout << "Trapezoid2RectangleMappingX constructed with x0,y0 " << x0 << " " << y0
00045 << " k= " << k << std::endl;
00046 #endif
00047 }
00048
00049 void rectangle( double xtrap, double ytrap,
00050 double& xrec, double& yrec) const {
00051
00052 yrec = ytrap - y0_;
00053 if (!parallel_) xrec = (xtrap - x0_) / (1.+ yrec*k_);
00054 else xrec = xtrap - x0_ + k_*yrec;
00055
00056 #ifdef DEBUG_GRID
00057 std::cout << xtrap << " " << ytrap << " transformed to rectangle " << xrec << " " << yrec << std::endl;
00058 #endif
00059 }
00060
00061 void trapezoid( double xrec, double yrec,
00062 double& xtrap, double& ytrap) const {
00063 if (!parallel_) xtrap = x0_ + xrec * (1.+ yrec*k_);
00064 else xtrap = x0_ + xrec - k_*yrec;
00065 ytrap = y0_ + yrec;
00066
00067 #ifdef DEBUG_GRID
00068 std::cout << xrec << " " << yrec << " transformed to trapezoid " << xtrap << " " << ytrap << std::endl;
00069 #endif
00070 }
00071
00072 private:
00073 double x0_;
00074 double y0_;
00075 double k_;
00076 bool parallel_;
00077 };
00078
00079 #endif