From 6d3b543648894eaa89746929841f60d1a11d41f9 Mon Sep 17 00:00:00 2001 From: Orange Date: Thu, 13 Nov 2025 15:29:10 +0300 Subject: [PATCH] Refactors triangle calculations for generic vectors Updates the `Triangle` class to use a generic `Vector` type instead of `Vector3`, enhancing flexibility and reusability. Changes include updating relevant function return types to use `Vector::ContainedType` and adapting length and distance calculations accordingly. This refactoring supports the ongoing work on the EPA algorithm (feature/epa_algorithm) by providing a more adaptable foundation for geometric calculations. --- include/omath/linear_algebra/triangle.hpp | 20 ++++++++++---------- include/omath/linear_algebra/vector2.hpp | 1 + include/omath/linear_algebra/vector3.hpp | 1 + include/omath/linear_algebra/vector4.hpp | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/omath/linear_algebra/triangle.hpp b/include/omath/linear_algebra/triangle.hpp index b8a877c..1d8e68c 100644 --- a/include/omath/linear_algebra/triangle.hpp +++ b/include/omath/linear_algebra/triangle.hpp @@ -26,12 +26,12 @@ namespace omath { } - Vector3 m_vertex1; - Vector3 m_vertex2; - Vector3 m_vertex3; + Vector m_vertex1; + Vector m_vertex2; + Vector m_vertex3; [[nodiscard]] - constexpr Vector3 calculate_normal() const + constexpr Vector calculate_normal() const { const auto b = side_b_vector(); const auto a = side_a_vector(); @@ -40,25 +40,25 @@ namespace omath } [[nodiscard]] - float side_a_length() const + Vector::ContainedType side_a_length() const { return m_vertex1.distance_to(m_vertex2); } [[nodiscard]] - float side_b_length() const + Vector::ContainedType side_b_length() const { return m_vertex3.distance_to(m_vertex2); } [[nodiscard]] - constexpr Vector3 side_a_vector() const + constexpr Vector side_a_vector() const { return m_vertex1 - m_vertex2; } [[nodiscard]] - constexpr float hypot() const + constexpr Vector::ContainedType hypot() const { return m_vertex1.distance_to(m_vertex3); } @@ -72,12 +72,12 @@ namespace omath return std::abs(side_a * side_a + side_b * side_b - hypot_value * hypot_value) <= 0.0001f; } [[nodiscard]] - constexpr Vector3 side_b_vector() const + constexpr Vector side_b_vector() const { return m_vertex3 - m_vertex2; } [[nodiscard]] - constexpr Vector3 mid_point() const + constexpr Vector mid_point() const { return (m_vertex1 + m_vertex2 + m_vertex3) / 3; } diff --git a/include/omath/linear_algebra/vector2.hpp b/include/omath/linear_algebra/vector2.hpp index 7f16173..2ee3750 100644 --- a/include/omath/linear_algebra/vector2.hpp +++ b/include/omath/linear_algebra/vector2.hpp @@ -19,6 +19,7 @@ namespace omath class Vector2 { public: + using ContainedType = Type; Type x = static_cast(0); Type y = static_cast(0); diff --git a/include/omath/linear_algebra/vector3.hpp b/include/omath/linear_algebra/vector3.hpp index 4b1d381..1aaec5a 100644 --- a/include/omath/linear_algebra/vector3.hpp +++ b/include/omath/linear_algebra/vector3.hpp @@ -23,6 +23,7 @@ namespace omath class Vector3 : public Vector2 { public: + using ContainedType = Type; Type z = static_cast(0); constexpr Vector3(const Type& x, const Type& y, const Type& z) noexcept: Vector2(x, y), z(z) { diff --git a/include/omath/linear_algebra/vector4.hpp b/include/omath/linear_algebra/vector4.hpp index 48b0278..f045df9 100644 --- a/include/omath/linear_algebra/vector4.hpp +++ b/include/omath/linear_algebra/vector4.hpp @@ -13,6 +13,7 @@ namespace omath class Vector4 : public Vector3 { public: + using ContainedType = Type; Type w; constexpr Vector4(const Type& x, const Type& y, const Type& z, const Type& w): Vector3(x, y, z), w(w)