Move point-segment distance to distance.hpp
This commit is contained in:
parent
621fac8451
commit
e4be2e9322
2 changed files with 14 additions and 14 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
#include <psemek/geom/point.hpp>
|
#include <psemek/geom/point.hpp>
|
||||||
#include <psemek/geom/box.hpp>
|
#include <psemek/geom/box.hpp>
|
||||||
#include <psemek/geom/math.hpp>
|
#include <psemek/geom/math.hpp>
|
||||||
|
#include <psemek/geom/simplex.hpp>
|
||||||
|
|
||||||
namespace psemek::geom
|
namespace psemek::geom
|
||||||
{
|
{
|
||||||
|
|
@ -21,4 +22,17 @@ namespace psemek::geom
|
||||||
return std::sqrt(s);
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,18 +43,4 @@ namespace psemek::geom
|
||||||
return os << ')';
|
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));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue