Add 2D convex polygon body

This commit is contained in:
Nikita Lisitsa 2021-05-07 17:37:15 +03:00
parent fc9e603a13
commit a04aac5968

View file

@ -0,0 +1,47 @@
#pragma once
#include <psemek/geom/simplex.hpp>
#include <psemek/cg/body/body.hpp>
#include <vector>
namespace psemek::cg
{
template <typename T>
struct polygon
{
polygon(std::vector<geom::point<T, 2>> vertices);
std::vector<geom::point<T, 2>> vertices;
std::vector<geom::segment<std::size_t>> edges;
};
template <typename T>
polygon<T>::polygon(std::vector<geom::point<T, 2>> vertices)
: vertices(std::move(vertices))
{
edges.resize(vertices.size());
for (std::size_t i = 0; i < vertices.size(); ++i)
edges[i].points = {i, (i + 1) % vertices.size()};
}
template <typename T>
constexpr std::size_t dimension(polygon<T> const &)
{
return 2;
}
template <typename T>
auto const & vertices(polygon<T> const & p)
{
return p.vertices;
}
template <typename T>
auto const & edges(polygon<T> const & p)
{
return p.edges;
}
}