Move point-segment distance to distance.hpp

This commit is contained in:
Nikita Lisitsa 2020-11-05 16:51:07 +03:00
parent 621fac8451
commit e4be2e9322
2 changed files with 14 additions and 14 deletions

View file

@ -3,6 +3,7 @@
#include <psemek/geom/point.hpp>
#include <psemek/geom/box.hpp>
#include <psemek/geom/math.hpp>
#include <psemek/geom/simplex.hpp>
namespace psemek::geom
{
@ -21,4 +22,17 @@ namespace psemek::geom
return std::sqrt(s);
}
template <typename T, std::size_t N>
T distance(point<T, N> const & p, segment<point<T, N>> const & s)
{
T const t = dot(p - s[0], s[1] - s[0]) / length_sqr(s[1] - s[0]);
if (t <= 0)
return distance(p, s[0]);
else if (t >= 1)
return distance(p, s[1]);
else
return distance(p, lerp(s[0], s[1], t));
}
}

View file

@ -43,18 +43,4 @@ namespace psemek::geom
return os << ')';
}
template <typename T, std::size_t N>
T distance(point<T, N> const & p, segment<point<T, N>> const & s)
{
T const t = dot(p - s[0], s[1] - s[0]) / length_sqr(s[1] - s[0]);
if (t <= 0)
return distance(p, s[0]);
else if (t >= 1)
return distance(p, s[1]);
else
return distance(p, lerp(s[0], s[1], t));
}
}