16 requires std::is_floating_point_v<T>
43 return Point3<T>(StartRadius_.X(), StartRadius_.Y(),
59 return StartRadius_.W();
64 return Start() == End_;
76 return left.StartRadius_ ==
right.StartRadius_ &&
85 Capsule3(
const Segment3<T>& centerLine, T radius, UncheckedTag) noexcept
87 StartRadius_(centerLine.Start().X(),
88 centerLine.Start().Y(),
89 centerLine.Start().Z(),
91 End_(centerLine.End())
95 Vec4<T> StartRadius_{};
105static_assert(std::is_trivially_copyable_v<mv::math::Capsule3f>);
106static_assert(std::is_standard_layout_v<mv::math::Capsule3f>);
109static_assert(std::is_trivially_copyable_v<mv::math::Capsule3d>);
110static_assert(std::is_standard_layout_v<mv::math::Capsule3d>);
static std::optional< Capsule3 > TryFromEndpointsRadius(const Point3< T > &start, const Point3< T > &end, T radius) noexcept
const Point3< T > & End() const noexcept
Segment3< T > CenterLine() const noexcept
friend bool operator==(const Capsule3 &left, const Capsule3 &right) noexcept
T Radius() const noexcept
Point3< T > Start() const noexcept
Capsule3() noexcept=default
bool IsFinite() const noexcept
bool IsDegenerate() const noexcept
static std::optional< Capsule3 > TryFromSegmentRadius(const Segment3< T > ¢erLine, T radius) noexcept
Capsule3< double > Capsule3d
Capsule3< float > Capsule3f