Add distance(point,segment)

This commit is contained in:
Nikita Lisitsa 2020-10-21 22:26:41 +03:00
parent 4de7d345a3
commit 42561ccadb

View file

@ -43,4 +43,15 @@ 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 && t <= 1)
return distance(p, lerp(s[0], s[1], t));
return std::min(distance(p, s[0]), distance(p, s[1]));
}
}