diff --git a/GeoLib/AnalyticalGeometry.cpp b/GeoLib/AnalyticalGeometry.cpp index 5165b8f057aba5eb9738daba362307a5cdae7b79..aefacc604680022d3efa48abb10d5a919b93d831 100644 --- a/GeoLib/AnalyticalGeometry.cpp +++ b/GeoLib/AnalyticalGeometry.cpp @@ -333,6 +333,17 @@ double calcTetrahedronVolume(const double* x1, const double* x2, const double* x return std::abs(GeoLib::scalarTriple(ac, ad, ab)) / 6.0; } +double calcTetrahedronVolume(MathLib::Point3d const& x1, + MathLib::Point3d const& x2, + MathLib::Point3d const& x3, + MathLib::Point3d const& x4) +{ + const MathLib::Vector3 ab(x1, x2); + const MathLib::Vector3 ac(x1, x3); + const MathLib::Vector3 ad(x1, x4); + return std::abs(GeoLib::scalarTriple(ac, ad, ab)) / 6.0; +} + // NewellPlane from book Real-Time Collision detection p. 494 void getNewellPlane(const std::vector<GeoLib::Point*>& pnts, MathLib::Vector3 &plane_normal, double& d) { diff --git a/GeoLib/AnalyticalGeometry.h b/GeoLib/AnalyticalGeometry.h index 1aa44c198b6c20c3590138bb8e635213257ddde3..7abe3260ae26358c8d3fe4b7ba9f077aec66a6bd 100644 --- a/GeoLib/AnalyticalGeometry.h +++ b/GeoLib/AnalyticalGeometry.h @@ -116,6 +116,10 @@ double calcTriangleArea(MathLib::Point3d const& a, MathLib::Point3d const& b, * The formula is V=1/6*|a(b x c)| with a=x1->x2, b=x1->x3 and c=x1->x4. */ double calcTetrahedronVolume(const double* x1, const double* x2, const double* x3, const double* x4); +double calcTetrahedronVolume(MathLib::Point3d const& x1, + MathLib::Point3d const& x2, + MathLib::Point3d const& x3, + MathLib::Point3d const& x4); /** * Tests if the given point p is within the triangle, defined by its edge nodes a, b and c.