Add cg::irregular_triangular_prism
This commit is contained in:
parent
718d0c7d04
commit
d7c9b484fe
1 changed files with 51 additions and 0 deletions
|
|
@ -86,4 +86,55 @@ namespace psemek::cg
|
|||
return p.edge_directions;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct irregular_triangular_prism
|
||||
{
|
||||
irregular_triangular_prism() = default;
|
||||
irregular_triangular_prism(geom::triangle<geom::point<T, 3>> const & low_triangle, geom::triangle<geom::point<T, 3>> const & high_triangle);
|
||||
|
||||
std::array<geom::point<T, 3>, 6> vertices;
|
||||
std::array<geom::vector<T, 3>, 9> edge_directions;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
irregular_triangular_prism<T>::irregular_triangular_prism(geom::triangle<geom::point<T, 3>> const & low_triangle, geom::triangle<geom::point<T, 3>> const & high_triangle)
|
||||
{
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
{
|
||||
vertices[i] = low_triangle[i];
|
||||
vertices[i + 3] = high_triangle[i];
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < 3; ++i)
|
||||
{
|
||||
edge_directions[i + 0] = geom::normalized(vertices[(i + 1) % 3] - vertices[i]);
|
||||
edge_directions[i + 3] = geom::normalized(vertices[3 + ((i + 1) % 3)] - vertices[3 + i]);
|
||||
edge_directions[i + 6] = geom::normalized(vertices[i + 3] - vertices[i]);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
auto const & vertices(irregular_triangular_prism<T> const & p)
|
||||
{
|
||||
return p.vertices;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
auto const & edges(irregular_triangular_prism<T> const &)
|
||||
{
|
||||
return edges(triangular_prism<T>{});
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
auto const & faces(irregular_triangular_prism<T> const &)
|
||||
{
|
||||
return faces(triangular_prism<T>{});
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
auto const & edge_directions(irregular_triangular_prism<T> const & p)
|
||||
{
|
||||
return p.edge_directions;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue