Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef __cmtkCubicInterpolator_h_included_
00033 #define __cmtkCubicInterpolator_h_included_
00034
00035 #include <cmtkconfig.h>
00036
00037 namespace
00038 cmtk
00039 {
00040
00043 namespace
00044 Interpolators
00045 {
00046
00048 class Cubic
00049 {
00050 public:
00052 static const int RegionSizeLeftRight = 2;
00053
00055 static Types::Coordinate GetWeight( const int weight, const Types::Coordinate x)
00056 {
00057 const Types::Coordinate xsquare = x * x;
00058 const Types::Coordinate xcube = xsquare * x;
00059 switch (weight)
00060 {
00061 case -1:
00062 return -0.5 * xcube + xsquare - 0.5 * x;
00063 case 0:
00064 return 1.5 * xcube - 2.5 * xsquare + 1;
00065 case 1:
00066 return -1.5 * xcube + 2 * xsquare + 0.5 * x;
00067 case 2:
00068 return 0.5 * xcube - 0.5 * xsquare;
00069 default:
00070 #ifdef DEBUG
00071 std::cerr << "weight=" << weight << " shouldn't happen!" << std::endl;
00072 exit( 1 );
00073 #endif
00074 break;
00075 }
00076 return 0;
00077 }
00078 };
00079
00080 }
00081
00083
00084 }
00085
00086 #endif