Salome HOME
Extra deps update
[tools/medcoupling.git] / src / INTERP_KERNEL / VectorUtils.hxx
index 21d69803a77d38139c2ef6cd57a2bbc989f852bd..00b2bf042cb1f20d28ccbfd5ccc6a9deda64d998 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #ifndef __VECTORUTILS_HXX__
 #define __VECTORUTILS_HXX__
 
+#include <algorithm>
 #include <sstream>
 #include <numeric>
 #include <string>
 #include <cmath>
 #include <map>
 
+
 namespace INTERP_KERNEL
 {
   /// Precision used for tests of 3D part of INTERP_KERNEL
@@ -145,6 +147,19 @@ namespace INTERP_KERNEL
     //    return std::fabs(x - y) < errTol;
   }
 
+
+  /**
+   * Test whether two 3D vectors are colinear. The two vectors are expected to be of unit norm (not checked)
+   * Implemented by checking that the norm of the cross product is null.
+   */
+  inline bool isColinear3D(const double *v1, const double *v2, const double eps = DEFAULT_ABS_TOL)
+  {
+    double cros[3];
+    cross(v1, v2, cros);
+    return epsilonEqual(dot(cros, cros), 0.0, eps);
+  }
+
+
   /**
    * Compares doubles using a relative tolerance
    * This is suitable mainly for comparing larger values to each other. Before performing the relative test,