diff options
Diffstat (limited to 'external/include/glm/gtx/closest_point.inl')
-rw-r--r-- | external/include/glm/gtx/closest_point.inl | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/external/include/glm/gtx/closest_point.inl b/external/include/glm/gtx/closest_point.inl new file mode 100644 index 0000000..ccda9ab --- /dev/null +++ b/external/include/glm/gtx/closest_point.inl @@ -0,0 +1,46 @@ +/// @ref gtx_closest_point +/// @file glm/gtx/closest_point.inl + +namespace glm +{ + template <typename T, precision P> + GLM_FUNC_QUALIFIER tvec3<T, P> closestPointOnLine + ( + tvec3<T, P> const & point, + tvec3<T, P> const & a, + tvec3<T, P> const & b + ) + { + T LineLength = distance(a, b); + tvec3<T, P> Vector = point - a; + tvec3<T, P> LineDirection = (b - a) / LineLength; + + // Project Vector3 to LineDirection to get the distance of point from a + T Distance = dot(Vector, LineDirection); + + if(Distance <= T(0)) return a; + if(Distance >= LineLength) return b; + return a + LineDirection * Distance; + } + + template <typename T, precision P> + GLM_FUNC_QUALIFIER tvec2<T, P> closestPointOnLine + ( + tvec2<T, P> const & point, + tvec2<T, P> const & a, + tvec2<T, P> const & b + ) + { + T LineLength = distance(a, b); + tvec2<T, P> Vector = point - a; + tvec2<T, P> LineDirection = (b - a) / LineLength; + + // Project Vector3 to LineDirection to get the distance of point from a + T Distance = dot(Vector3, LineDirection); + + if(Distance <= T(0)) return a; + if(Distance >= LineLength) return b; + return a + LineDirection * Distance; + } + +}//namespace glm |