r3884: *** empty log message ***
[ctsim.git] / include / interpolator.h
index 1b1fc484b2fc24b63f382dff5cd522e10ecce587..6b3469ba01a4e4674352473beff7024880dfd5c1 100644 (file)
@@ -2,7 +2,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: interpolator.h,v 1.4 2001/03/24 05:28:28 kevin Exp $
+**  $Id: interpolator.h,v 1.8 2003/01/30 21:53:16 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -53,8 +53,8 @@ template<class T>
 class BilinearInterpolator {
 private:
   T** const m_ppMatrix;
-  const unsigned int m_nx;
-  const unsigned int m_ny;
+  const int m_nx;
+  const int m_ny;
 
 public:
   BilinearInterpolator (T** ppMatrix, unsigned int nx, unsigned int ny)
@@ -63,8 +63,8 @@ public:
   
   T interpolate (double dXPos, double dYPos)
   {
-    int iFloorX = floor (dXPos);
-    int iFloorY = floor (dYPos);
+    int iFloorX = static_cast<int>(floor(dXPos));
+    int iFloorY = static_cast<int>(floor (dYPos));
     double dXFrac = dXPos - iFloorX;
     double dYFrac = dYPos - iFloorY;
 
@@ -73,16 +73,16 @@ public:
     if (iFloorX < 0 || iFloorY < 0 || iFloorX > m_nx-1 || iFloorY > m_ny-1)
       result = 0;
     else if (iFloorX == m_nx - 1 && iFloorY == m_ny - 1)
-      result = m_ppMatrix[m_nx-1][m_ny-1];
+      result = static_cast<T>(m_ppMatrix[m_nx-1][m_ny-1]);
     else if (iFloorX == m_nx - 1)
-      result = m_ppMatrix[iFloorX][iFloorY] + dYFrac * (m_ppMatrix[iFloorX][iFloorY+1] - m_ppMatrix[iFloorX][iFloorY]);
+      result = static_cast<T>(m_ppMatrix[iFloorX][iFloorY] + dYFrac * (m_ppMatrix[iFloorX][iFloorY+1] - m_ppMatrix[iFloorX][iFloorY]));
     else if (iFloorY == m_ny - 1)
-      result = m_ppMatrix[iFloorX][iFloorY] + dXFrac * (m_ppMatrix[iFloorX+1][iFloorY] - m_ppMatrix[iFloorX][iFloorY]);
+      result = static_cast<T>(m_ppMatrix[iFloorX][iFloorY] + dXFrac * (m_ppMatrix[iFloorX+1][iFloorY] - m_ppMatrix[iFloorX][iFloorY]));
     else
-      result = (1 - dXFrac) * (1 - dYFrac) * m_ppMatrix[iFloorX][iFloorY] + 
+      result = static_cast<T>((1 - dXFrac) * (1 - dYFrac) * m_ppMatrix[iFloorX][iFloorY] + 
         dXFrac * (1 - dYFrac) * m_ppMatrix[iFloorX+1][iFloorY] + 
         dYFrac * (1 - dXFrac) * m_ppMatrix[iFloorX][iFloorY+1] +
-        dXFrac * dYFrac * m_ppMatrix[iFloorX+1][iFloorY+1];
+        dXFrac * dYFrac * m_ppMatrix[iFloorX+1][iFloorY+1]);
 
     return result;
   }
@@ -103,10 +103,10 @@ public:
   
   T interpolate (double dXPos, double dYPos)
   {
-    int iFloorX = floor (dXPos);
-    int iFloorY = floor (dYPos);
-    double dXFrac = dXPos - iFloorX;
-    double dYFrac = dYPos - iFloorY;
+    // int iFloorX = static_cast<int>(floor (dXPos));
+    // int iFloorY = static_cast<int>(floor (dYPos));
+    // double dXFrac = dXPos - iFloorX;
+    // double dYFrac = dYPos - iFloorY;
 
     T result = 0;
 
@@ -122,7 +122,7 @@ class LinearInterpolator {
 private:
   T* const m_pX;
   T* const m_pY;
-  const unsigned int m_n;
+  const int m_n;
   const bool m_bZeroOutsideRange;
 
 public:
@@ -154,7 +154,7 @@ public:
         else
           result = m_pY[m_n - 1];
       } else {
-       int iFloor = floor(dX);
+       int iFloor = static_cast<int>(floor(dX));
        result = m_pY[iFloor] + (m_pY[iFloor+1] - m_pY[iFloor]) * (dX - iFloor);
       }
     } else {