// // Created by Orange on 11/13/2024. // #pragma once #include "omath/Vector3.hpp" namespace omath { template class Triangle final { public: constexpr Triangle() = default; constexpr Triangle(const Vector& vertex1, const Vector& vertex2, const Vector& vertex3) : m_vertex1(vertex1), m_vertex2(vertex2), m_vertex3(vertex3) { } Vector3 m_vertex1; Vector3 m_vertex2; Vector3 m_vertex3; [[nodiscard]] constexpr Vector3 CalculateNormal() const { const auto b = SideBVector(); const auto a = SideAVector(); return b.Cross(a).Normalized(); } [[nodiscard]] float SideALength() const { return m_vertex1.DistTo(m_vertex2); } [[nodiscard]] float SideBLength() const { return m_vertex3.DistTo(m_vertex2); } [[nodiscard]] constexpr Vector3 SideAVector() const { return m_vertex1 - m_vertex2; } [[nodiscard]] constexpr float Hypot() const { return m_vertex1.DistTo(m_vertex3); } [[nodiscard]] constexpr bool IsRectangular() const { const auto sideA = SideALength(); const auto sideB = SideBLength(); const auto hypot = Hypot(); return sideA*sideA + sideB*sideB == hypot*hypot; } [[nodiscard]] constexpr Vector3 SideBVector() const { return m_vertex3 - m_vertex2; } [[nodiscard]] constexpr Vector3 MidPoint() const { return (m_vertex1 + m_vertex2 + m_vertex3) / 3; } }; } // namespace omath