New cpp folder structure

Signed-off-by: Alexander Borsuk <me@alex.bio>
This commit is contained in:
Alexander Borsuk
2025-07-17 22:35:52 +03:00
committed by Konstantin Pastbin
parent c9cbb64f12
commit 76ffc99abd
2390 changed files with 345 additions and 339 deletions

View File

@@ -0,0 +1,66 @@
#pragma once
#include "point2d.hpp"
#include <sstream>
#include <vector>
namespace m2
{
template <typename T> struct Triangle
{
Point<T> m_points[3];
Triangle(Point<T> const & p1, Point<T> const & p2, Point<T> const & p3)
{
m_points[0] = p1;
m_points[1] = p2;
m_points[2] = p3;
}
Point<T> const & p1() const { return m_points[0]; }
Point<T> const & p2() const { return m_points[1]; }
Point<T> const & p3() const { return m_points[2]; }
};
using TriangleF = Triangle<float>;
using TriangleD = Triangle<double>;
template <typename T>
std::string DebugPrint(m2::Triangle<T> const & trg)
{
std::stringstream s;
s << "Triangle ["
<< DebugPrint(trg.p1()) << ", "
<< DebugPrint(trg.p2()) << ", "
<< DebugPrint(trg.p3()) << "]";
return s.str();
}
template <class T>
double GetTriangleArea(Point<T> const & p1, Point<T> const & p2, Point<T> const & p3)
{
return 0.5 * fabs((p2.x - p1.x)*(p3.y - p1.y) - (p3.x - p1.x)*(p2.y - p1.y));
}
m2::PointD GetRandomPointInsideTriangle(m2::TriangleD const & t);
m2::PointD GetRandomPointInsideTriangles(std::vector<m2::TriangleD> const & v);
// Project point to the nearest edge of the nearest triangle from list of triangles.
// pt must be outside triangles.
m2::PointD ProjectPointToTriangles(m2::PointD const & pt, std::vector<m2::TriangleD> const & v);
/// @param[in] pt - Point to check
/// @param[in] p1, p2, p3 - Triangle
//@{
bool IsPointInsideTriangle(m2::PointD const & pt, m2::PointD const & p1,
m2::PointD const & p2, m2::PointD const & p3);
bool IsPointStrictlyInsideTriangle(m2::PointD const & pt, m2::PointD const & p1,
m2::PointD const & p2, m2::PointD const & p3);
bool IsPointInsideTriangles(m2::PointD const & pt, std::vector<m2::TriangleD> const & v);
//@}
} // namespace m2