Fix orthographic transform applied to vectors & points

This commit is contained in:
Nikita Lisitsa 2020-10-21 22:26:12 +03:00
parent c1d9095327
commit 1b3c412102
2 changed files with 22 additions and 2 deletions

View file

@ -42,4 +42,24 @@ namespace psemek::geom
return result;
}
template <typename T, std::size_t D>
vector<T, D - 1> as_vector(vector<T, D> const & v)
{
static_assert(D > 1);
vector<T, D - 1> result;
for (std::size_t i = 0; i < D - 1; ++i)
result[i] = v[i];
return result;
}
template <typename T, std::size_t D>
point<T, D - 1> as_point(vector<T, D> const & v)
{
static_assert(D > 1);
point<T, D - 1> result;
for (std::size_t i = 0; i < D - 1; ++i)
result[i] = v[i] / v[D - 1];
return result;
}
}

View file

@ -64,13 +64,13 @@ namespace psemek::geom
template <typename T, std::size_t D>
vector<T, D> orthographic<T, D>::operator() (vector<T, D> v) const
{
return homogeneous_matrix() * homogeneous(v);
return as_vector(homogeneous_matrix() * homogeneous(v));
}
template <typename T, std::size_t D>
point<T, D> orthographic<T, D>::operator() (point<T, D> p) const
{
return homogeneous_matrix() * homogeneous(p);
return as_point(homogeneous_matrix() * homogeneous(p));
}
template <typename T, std::size_t D>