diff --git a/libs/cg/include/psemek/cg/body/polygon.hpp b/libs/cg/include/psemek/cg/body/polygon.hpp new file mode 100644 index 00000000..d49caf4d --- /dev/null +++ b/libs/cg/include/psemek/cg/body/polygon.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include +#include + +#include + +namespace psemek::cg +{ + + template + struct polygon + { + polygon(std::vector> vertices); + + std::vector> vertices; + std::vector> edges; + }; + + template + polygon::polygon(std::vector> 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 + constexpr std::size_t dimension(polygon const &) + { + return 2; + } + + template + auto const & vertices(polygon const & p) + { + return p.vertices; + } + + template + auto const & edges(polygon const & p) + { + return p.edges; + } + +}