00001
00025
00026
00027 #ifndef __ETL__CURVE_FUNC_H
00028 #define __ETL__CURVE_FUNC_H
00029
00030
00031
00032 #include <functional>
00033
00034
00035
00036 template <class T, class K=float>
00037 struct affine_combo
00038 {
00039
00040 T operator()(const T &a,const T &b,const K &t)const
00041 {
00042 return T( (b-a)*t+a );
00043 }
00044
00045
00046 T reverse(const T &x, const T &b, const K &t)const
00047 {
00048 return T( (x-t*b)*(static_cast<K>(1)/(static_cast<K>(1)-t)) );
00049 }
00050 };
00051
00052 template <class T, class K=float>
00053 struct distance_func : public std::binary_function<T, T, K>
00054 {
00055 K operator()(const T &a,const T &b)const
00056 {
00057 T delta=b-a;
00058 return static_cast<K>(delta*delta);
00059 }
00060
00061 K cook(const K &x)const { return x*x; }
00062 K uncook(const K &x)const { return sqrt(x); }
00063
00064 };
00065
00066
00067
00068 #endif