diff --git a/MathLib/GeometricBasics.cpp b/MathLib/GeometricBasics.cpp index a80e22aaccc87004563c606fae227ed1a81ca5f1..44ce5bd5941e07de9e15d5d85f5a820ba30d17c9 100644 --- a/MathLib/GeometricBasics.cpp +++ b/MathLib/GeometricBasics.cpp @@ -10,8 +10,8 @@ #include <logog/include/logog.hpp> -#include "MathLib/LinAlg/Dense/DenseMatrix.h" -#include "MathLib/LinAlg/Solvers/GaussAlgorithm.h" +#include <Eigen/Dense> + #include "Point3d.h" #include "Vector3.h" @@ -112,17 +112,16 @@ bool gaussPointInTriangle(MathLib::Point3d const& q, MathLib::Vector3 const v(a, b); MathLib::Vector3 const w(a, c); - MathLib::DenseMatrix<double> mat(2, 2); + Eigen::Matrix2d mat; mat(0, 0) = v.getSqrLength(); mat(0, 1) = v[0] * w[0] + v[1] * w[1] + v[2] * w[2]; mat(1, 0) = mat(0, 1); mat(1, 1) = w.getSqrLength(); - double y[2] = { - v[0] * (q[0] - a[0]) + v[1] * (q[1] - a[1]) + v[2] * (q[2] - a[2]), - w[0] * (q[0] - a[0]) + w[1] * (q[1] - a[1]) + w[2] * (q[2] - a[2])}; + Eigen::Vector2d y; + y << v[0] * (q[0] - a[0]) + v[1] * (q[1] - a[1]) + v[2] * (q[2] - a[2]), + w[0] * (q[0] - a[0]) + w[1] * (q[1] - a[1]) + w[2] * (q[2] - a[2]); - MathLib::GaussAlgorithm<MathLib::DenseMatrix<double>, double*> gauss; - gauss.solve(mat, y); + y = mat.partialPivLu().solve(y); const double lower(eps_pnt_out_of_tri); const double upper(1 + lower); @@ -171,15 +170,15 @@ bool isPointInTriangleXY(MathLib::Point3d const& p, MathLib::Point3d const& c) { // criterion: p-a = u0 * (b-a) + u1 * (c-a); 0 <= u0, u1 <= 1, u0+u1 <= 1 - MathLib::DenseMatrix<double> mat(2, 2); + Eigen::Matrix2d mat; mat(0, 0) = b[0] - a[0]; mat(0, 1) = c[0] - a[0]; mat(1, 0) = b[1] - a[1]; mat(1, 1) = c[1] - a[1]; - double y[2] = {p[0] - a[0], p[1] - a[1]}; + Eigen::Vector2d y; + y << p[0] - a[0], p[1] - a[1]; - MathLib::GaussAlgorithm<MathLib::DenseMatrix<double>, double*> gauss; - gauss.solve(mat, y, true); + y = mat.partialPivLu().solve(y); // check if u0 and u1 fulfills the condition return 0 <= y[0] && y[0] <= 1 && 0 <= y[1] && y[1] <= 1 && y[0] + y[1] <= 1;