15 requires std::is_floating_point_v<T>
26 if (!IsFinitePoint(
origin))
47 return Origin_ + Direction_.Vector() *
distance;
62 Ray3(
const Point3<T>& origin,
63 const Direction3<T>& direction,
64 UncheckedTag) noexcept :
65 Origin_(origin), Direction_(direction)
69 [[nodiscard]]
static bool IsFinitePoint(
const Point3<T>& point)
noexcept
71 return std::isfinite(point.X()) && std::isfinite(point.Y()) &&
72 std::isfinite(point.Z());
76 Direction3<T> Direction_;
85static_assert(std::is_trivially_copyable_v<mv::math::Ray3f>);
86static_assert(std::is_standard_layout_v<mv::math::Ray3f>);
89static_assert(std::is_trivially_copyable_v<mv::math::Ray3d>);
90static_assert(std::is_standard_layout_v<mv::math::Ray3d>);
const Point3< T > & Origin() const noexcept
static std::optional< Ray3 > TryFromOriginDirection(const Point3< T > &origin, const Direction3< T > &direction) noexcept
Point3< T > PointAt(T distance) const noexcept
const Direction3< T > & Direction() const noexcept
friend bool operator==(const Ray3 &left, const Ray3 &right) noexcept