Files
VMath/include/VMath/segment3.inl
T
jeanlemotan bc037aa2bd First
2024-07-02 18:27:05 +02:00

71 lines
1.4 KiB
C++

namespace math
{
template<typename T>
constexpr segment3<T>::segment3(const vec3<T>& start, const vec3<T>& end) noexcept
: start(start)
, end(end)
{
}
template<typename T>
constexpr bool segment3<T>::is_empty() const noexcept
{
return is_equal(start, end);
}
template<typename T>
constexpr vec3<T> segment3<T>::get_direction() const noexcept
{
return normalized(end - start);
}
template<typename T>
constexpr vec3<T> segment3<T>::get_center() const noexcept
{
if constexpr (std::is_floating_point_v<T>)
return (start + end) * T(0.5);
else
return (start + end) / T(2);
}
template<typename T>
constexpr T segment3<T>::length() const noexcept
{
return distance(end, start);
}
template<typename T>
constexpr T segment3<T>::length_sq() const noexcept
{
return distance_sq(end, start);
}
template<typename T>
constexpr vec3<T> segment3<T>::get_point(T t) const noexcept
{
return lerp(start, end, t);
}
template<typename T>
constexpr void segment3<T>::translate(const vec3<T>& offset) noexcept
{
start += offset;
end += offset;
}
}
#include "tl/hash_and_combine.h"
template<typename T>
struct eastl::hash<math::segment3<T>>
{
std::size_t operator()(const math::segment3<T>& p) const
{
size_t seed = 0;
tl::hash_and_combine(seed, p.start);
tl::hash_and_combine(seed, p.end);
return seed;
}
};