71 lines
1.4 KiB
C++
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;
|
|
}
|
|
};
|
|
|