diff --git a/MathLib/Point3d.cpp b/MathLib/Point3d.cpp index 71277056070fca816fcf2f6649c14cef30e43271..ad1b56ea7e0c1526e5a26ac58655b933b1c0f4c7 100644 --- a/MathLib/Point3d.cpp +++ b/MathLib/Point3d.cpp @@ -18,36 +18,6 @@ namespace MathLib { -bool operator< (const MathLib::Point3d& p0, const MathLib::Point3d& p1) -{ - if (p0[0] > p1[0]) { - return false; - } else { - if (p0[0] < p1[0]) { - return true; - } - } - // => p0[0] == p1[0] - - if (p0[1] > p1[1]) { - return false; - } else { - if (p0[1] < p1[1]) { - return true; - } - } - // => p0[1] == p1[1] - - if (p0[2] > p1[2]) { - return false; - } else { - if (p0[2] < p1[2]) { - return true; - } - return false; // p0 == p1 - } -} - bool lessEq(const MathLib::Point3d& p0, const MathLib::Point3d& p1, double tol) { // test a relative and an absolute criterion diff --git a/MathLib/Point3d.h b/MathLib/Point3d.h index 0c8c985e58b6850e83bc6bf7b28fd9927bdb964a..85ed4b4ca4cf11b908a7b94ddbb4057e9d43d49a 100644 --- a/MathLib/Point3d.h +++ b/MathLib/Point3d.h @@ -23,8 +23,6 @@ namespace MathLib { typedef MathLib::TemplatePoint<double,3> Point3d; -bool operator< (MathLib::Point3d const & p0, MathLib::Point3d const & p1); - /** * lexicographical comparison of points taking an epsilon into account * @param p0 first input Point3d diff --git a/MathLib/TemplatePoint.h b/MathLib/TemplatePoint.h index b8be4e918afb2b39c97970f995843a7f1271fbb3..d6429bf2fe9cc6bd47dfa9d7b6b4525112916f43 100644 --- a/MathLib/TemplatePoint.h +++ b/MathLib/TemplatePoint.h @@ -111,6 +111,25 @@ bool operator==(TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b) return (sqr_dist < eps*eps); } +template <typename T, std::size_t DIM> +bool operator< (TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b) +{ + for (std::size_t i = 0; i < DIM; ++i) + { + if (a[i] > b[i]) { + return false; + } else { + if (a[i] < b[i]) { + return true; + } + } + // continue with next dimension, because a[0] == b[0] + } + + // The values in all dimenisions are equal. + return false; +} + /** Distance between points p0 and p1 in the maximum norm. */ template <typename T> T maxNormDist(const MathLib::TemplatePoint<T>* p0, const MathLib::TemplatePoint<T>* p1)