Add 2D convex polygon body
This commit is contained in:
parent
fc9e603a13
commit
a04aac5968
1 changed files with 47 additions and 0 deletions
47
libs/cg/include/psemek/cg/body/polygon.hpp
Normal file
47
libs/cg/include/psemek/cg/body/polygon.hpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue