00001 #ifndef BALL_MATHS_CUBICSPLINE1D_H
00002 #define BALL_MATHS_CUBICSPLINE1D_H
00003
00004 #include <set>
00005 #include <map>
00006
00007 #ifndef BALL_COMMON_H
00008 # include <BALL/common.h>
00009 #endif
00010
00011 #ifndef BALL_COMMON_LIMITS_H
00012 # include <BALL/COMMON/limits.h>
00013 #endif
00014
00015 #ifndef BALL_DATATYPE_OPTIONS_H
00016 # include <BALL/DATATYPE/options.h>
00017 #endif
00018
00019 namespace BALL
00020 {
00021
00022 class BALL_EXPORT CubicSpline1D
00023 {
00024 public:
00025
00026 static const int VERBOSITY_LEVEL_DEBUG;
00027 static const int VERBOSITY_LEVEL_CRITICAL;
00028
00032
00033 BALL_CREATE(CubicSpline1D)
00034
00035
00036
00038 CubicSpline1D();
00039
00052 CubicSpline1D(const std::vector<float>& sample_positions,
00053 const std::vector<float>& sample_values,
00054 bool return_average = false,
00055 bool is_natural = true,
00056 float lower_derivative = 0.0,
00057 float upper_derivative = 0.0,
00058 int verbosity = VERBOSITY_LEVEL_DEBUG);
00059
00072 CubicSpline1D(const std::vector<float>& sample_positions,
00073 const std::vector<float>& sample_values,
00074 float default_value,
00075 bool is_natural = true,
00076 float lower_derivative = 0.0,
00077 float upper_derivative = 0.0,
00078 int verbosity = VERBOSITY_LEVEL_DEBUG);
00079
00092 CubicSpline1D(const std::vector<float>& sample_positions,
00093 const std::vector<float>& sample_values,
00094 float default_value,
00095 float lower_bound,
00096 float upper_bound,
00097 bool is_natural = true,
00098 float lower_derivative = 0.0,
00099 float upper_derivative = 0.0,
00100 int verbosity = VERBOSITY_LEVEL_DEBUG);
00101
00114 CubicSpline1D(const std::vector<float>& sample_positions,
00115 const std::vector<float>& sample_values,
00116 float lower_bound,
00117 float upper_bound,
00118 bool return_average = false,
00119 float default_value = std::numeric_limits<float>::min(),
00120 bool is_natural = true,
00121 float lower_derivative = 0.0,
00122 float upper_derivative = 0.0,
00123 int verbosity = VERBOSITY_LEVEL_DEBUG);
00124
00125
00128 CubicSpline1D(const CubicSpline1D& cs1D);
00129
00132 virtual ~CubicSpline1D();
00133
00135 void setVerbosity(int verbosity) { verbosity_ = verbosity; }
00136
00138 int getVerbosity() const { return verbosity_; }
00139
00147 float operator () (float x);
00148
00151 std::vector<float> getCurvature() const {return curvature_;}
00152
00159 void setCurvature(std::vector<float> curvature);
00160
00165 void setValues(std::vector<float> values, bool recompute = true);
00166
00169 std::vector<float> getValues() const {return sample_values_;}
00170
00173 std::vector<float> getPositions() const {return sample_positions_;}
00174
00179 void setPositions(std::vector<float> positions, bool recompute = true);
00180
00183 void setDefaultValue(float value) {default_value_ = value;}
00184 float getDefaultValue() const {return default_value_;}
00185
00190 void setLowerBound(float lb) {lower_bound_ = lb;}
00191 void setUpperBound(float ub) {upper_bound_ = ub;}
00192
00195 float getLowerBound() const {return lower_bound_;}
00196 float getUpperBound() const {return upper_bound_;}
00197
00199 bool isNatural() const {return is_natural_;}
00200
00204 void makeNatural(bool recompute = true);
00205
00210 void setBoudaryDerivatives(float lower_derivative, float upper_derivative, bool recompute = true);
00211
00217 void setLowerDerivative(float derivative, bool recompute = true);
00218
00220 float getLowerDerivative() const {return lower_derivative_;}
00221
00227 void setUpperDerivative(float derivative, bool recompute = true);
00228
00230 float getUpperDerivative() const {return upper_derivative_;}
00231
00232 private :
00233
00239 void createSpline();
00240
00241
00242 std::vector<float> sample_positions_;
00243
00244 std::vector<float> sample_values_;
00245
00246 std::vector<float> curvature_;
00247
00248
00249 bool return_average_;
00250
00255 float default_value_;
00256
00257
00258 float lower_bound_;
00259
00260
00261 float upper_bound_;
00262
00263
00264 bool is_natural_;
00265
00266
00267 float lower_derivative_;
00268
00269
00270 float upper_derivative_;
00271
00273 int verbosity_;
00274 };
00275
00276 }
00277 #endif