00001 00012 /***************************************************************************** 00013 ** Ifdefs 00014 *****************************************************************************/ 00015 00016 #ifndef ECL_MATH_NORMS_HPP_ 00017 #define ECL_MATH_NORMS_HPP_ 00018 00019 /***************************************************************************** 00020 ** Includes 00021 *****************************************************************************/ 00022 00023 #include <cmath> 00024 00025 /***************************************************************************** 00026 ** Namespaces 00027 *****************************************************************************/ 00028 00029 namespace ecl { 00030 00031 /***************************************************************************** 00032 ** Functors 00033 *****************************************************************************/ 00039 class EuclideanNorm { 00040 public: 00048 template <typename T> 00049 T operator()(const T& x1, const T& x2) { 00050 return std::sqrt(x1*x1 + x2*x2); 00051 } 00052 00061 template <typename T> 00062 T operator()(const T& x1, const T& x2, const T& x3) { 00063 return std::sqrt(x1*x1 + x2*x2 + x3*x3); 00064 } 00065 00066 // n dimensional cases using vectors, valarrays and eigen vectors here. 00067 00068 // maybe also a norm(vectorx, vectory) which is sqrt((x0-y0)^2+(x1-y1)^2.....) 00069 }; 00070 00071 /***************************************************************************** 00072 ** Functions 00073 *****************************************************************************/ 00081 template <typename T> 00082 T euclidean_norm(const T& x1, const T& x2) { 00083 return std::sqrt(x1*x1 + x2*x2); 00084 } 00085 00094 template <typename T> 00095 T euclidean_norm(const T& x1, const T& x2, const T& x3) { 00096 return std::sqrt(x1*x1 + x2*x2 + x3*x3); 00097 } 00098 00099 } // namespace ecl 00100 00101 #endif /* ECL_MATH_NORMS_HPP_ */