10 struct FTaperedCapsuleSpecializeSamplingHelper;
16 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCapsule)
21 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCapsule)
23 , Axis((X2 - X1).GetSafeNormal())
28 , bIsOneSided(!OneSidedPlaneNormal.IsNearlyZero())
29 , LocalBoundingBox(X1, X1)
37 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCapsule)
38 , Origin(
Other.Origin)
40 , OneSidedPlaneNormal(
Other.OneSidedPlaneNormal)
41 , Height(
Other.Height)
42 , Radius1(
Other.Radius1)
43 , Radius2(
Other.Radius2)
44 , bIsOneSided(
Other.bIsOneSided)
45 , LocalBoundingBox(
Other.LocalBoundingBox)
50 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCapsule)
54 , Height(
Other.Height)
55 , Radius1(
Other.Radius1)
56 , Radius2(
Other.Radius2)
57 , bIsOneSided(
Other.bIsOneSided)
119 OutNormal = (x - ClosestPoint);
120 return OutNormal.SafeNormalize() - Radius;
165 if (Radius1 == Radius2)
197 const FReal R1 = FMath::Min(Radius1, Radius2);
198 const FReal R2 = FMath::Max(Radius1, Radius2);
199 const FReal HH = Height * Height;
219 return FRotation3::FromRotatedVector(
FVec3(0, 0, 1),
Axis);
237 static constexpr int32 SizeOfOrigin() {
return sizeof(FTaperedCapsule::Origin); }
239 static constexpr int32 SizeOfAxis() {
return sizeof(FTaperedCapsule::Axis); }
243 static constexpr int32 SizeOfHeight() {
return sizeof(FTaperedCapsule::Height); }
256 FReal GetRadiusAtDistance(
const FReal& Phi)
const
262 static FReal GetHemisphereVolume(
const FReal Radius)
267 static FReal GetTaperedSectionVolume(
const FReal Height,
const FReal Radius1,
const FReal Radius2)
270 return PI_OVER_3 * Height * (Radius1 * Radius1 + Radius1 * Radius2 + Radius2 * Radius2);
276 bool bIsOneSided =
false;
284 const int32 NumPoints)
286 if (NumPoints <= 1 ||
342 const int32 NumPoints,
353 const FReal HalfHeight = Height / 2;
396 const int32 NumPoints,
425 const FReal HalfHeight = Height / 2;
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
#define UE_PI
Definition UnrealMathUtility.h:129
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition ImplicitObject.h:111
bool bIsConvex
Definition ImplicitObject.h:572
Definition TaperedCapsule.h:13
static FMatrix33 GetInertiaTensor(const FReal Mass, const FReal Height, const FReal Radius1, const FReal Radius2)
Definition TaperedCapsule.h:193
TArray< FVec3 > ComputeSamplePoints(const FReal PointsPerUnitArea, const int32 MinPoints, const int32 MaxPoints) const
Definition TaperedCapsule.h:105
~FTaperedCapsule()
Definition TaperedCapsule.h:62
const FVec3f & GetOriginf() const
Definition TaperedCapsule.h:131
FReal GetRadius1() const
Definition TaperedCapsule.h:123
FVec3 GetInsertion() const
Definition TaperedCapsule.h:133
FVec3 GetCenter() const
Definition TaperedCapsule.h:134
TArray< FVec3 > ComputeSamplePoints(const int32 NumPoints) const
Definition TaperedCapsule.h:455
virtual const FAABB3 BoundingBox() const override
Definition TaperedCapsule.h:111
FTaperedCapsule(const FVec3 &X1, const FVec3 &X2, const FReal InRadius1, const FReal InRadius2, const FVec3 &SplitXAxis=FVec3::ZeroVector)
Definition TaperedCapsule.h:20
FVec3 GetX1() const
Definition TaperedCapsule.h:127
FVec3 GetAxis() const
Definition TaperedCapsule.h:158
FTaperedCapsule(const FTaperedCapsule &Other)
Definition TaperedCapsule.h:36
virtual uint32 GetTypeHash() const override
Definition TaperedCapsule.h:222
FVec3 GetOneSidedPlaneNormal() const
Definition TaperedCapsule.h:136
FReal GetRadius2() const
Definition TaperedCapsule.h:124
FReal PhiWithNormal(const FVec3 &x, FVec3 &OutNormal) const
Definition TaperedCapsule.h:113
const FVec3f & GetOneSidedPlaneNormalf() const
Definition TaperedCapsule.h:137
static FReal GetVolume(const FReal Height, const FReal Radius1, const FReal Radius2)
Definition TaperedCapsule.h:184
FReal GetVolume() const
Definition TaperedCapsule.h:183
FTaperedCapsule()
Definition TaperedCapsule.h:15
FReal GetSlantHeight() const
Definition TaperedCapsule.h:126
TArray< FVec3 > ComputeLocalSamplePoints(const int32 NumPoints) const
Definition TaperedCapsule.h:445
FVec3 GetX2() const
Definition TaperedCapsule.h:128
FRotation3 GetRotationOfMass() const
Definition TaperedCapsule.h:214
FReal GetArea(const bool IncludeEndCaps=true) const
Definition TaperedCapsule.h:160
FMatrix33 GetInertiaTensor(const FReal Mass) const
Definition TaperedCapsule.h:192
static FRotation3 GetRotationOfMass(const FVec3 &Axis)
Definition TaperedCapsule.h:215
static constexpr EImplicitObjectType StaticType()
Definition TaperedCapsule.h:64
bool IsOneSided() const
Definition TaperedCapsule.h:135
FTaperedCapsule(FTaperedCapsule &&Other)
Definition TaperedCapsule.h:49
TArray< FVec3 > ComputeLocalSamplePoints(const FReal PointsPerUnitArea, const int32 MinPoints=0, const int32 MaxPoints=1000) const
Definition TaperedCapsule.h:83
static FReal GetArea(const FReal Height, const FReal Radius1, const FReal Radius2, const bool IncludeEndCaps)
Definition TaperedCapsule.h:161
FVec3 GetOrigin() const
Definition TaperedCapsule.h:130
FVec3 GetCenterOfMass() const
Definition TaperedCapsule.h:139
FReal GetHeight() const
Definition TaperedCapsule.h:125
FORCEINLINE const TVector< T, d > & Max() const
Definition AABB.h:596
FORCEINLINE void GrowToInclude(const TVector< T, d > &V)
Definition AABB.h:393
FORCEINLINE const TVector< T, d > & Min() const
Definition AABB.h:595
T GetArea() const
Definition Sphere.h:196
static FRealSingle DotProduct(const TVector< FRealSingle, 3 > &V1, const TVector< FRealSingle, 3 > &V2)
Definition Vector.h:446
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
@ TaperedCapsule
Definition ImplicitObjectType.h:29
Definition SkeletalMeshComponent.h:307
TSphere< FReal, 3 > FSphere
Definition ImplicitObject.h:36
TVector< FRealSingle, 3 > FVec3f
Definition Core.h:27
uint8 EImplicitObjectType
Definition ImplicitObjectType.h:41
FRealDouble FReal
Definition Real.h:22
PMatrix< FReal, 3, 3 > FMatrix33
Definition Core.h:20
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
uint32 GetTypeHash(const TBox< T > &Box)
Definition Box.h:1008
Definition TaperedCapsule.h:281
static void ComputeGoldenSpiralPoints(TArray< FVec3 > &Points, const FVec3 &Origin, const FVec3 &Axis, const FReal Radius1, const FReal Radius2, const FReal Height, const int32 NumPoints, const int32 SpiralSeed=0)
Definition TaperedCapsule.h:335
static void ComputeGoldenSpiralPointsUnoriented(TArray< FVec3 > &Points, const FReal Radius1, const FReal Radius2, const FReal Height, const int32 NumPoints, int32 SpiralSeed=0)
Definition TaperedCapsule.h:391
static FORCEINLINE void ComputeGoldenSpiralPoints(TArray< FVec3 > &Points, const FTaperedCapsule &Capsule, const int32 NumPoints)
Definition TaperedCapsule.h:308
static FORCEINLINE void ComputeSamplePoints(TArray< FVec3 > &Points, const FTaperedCapsule &Capsule, const int32 NumPoints)
Definition TaperedCapsule.h:282
static void ComputeGoldenSpiralPointsUnoriented(TArray< FVec3 > &Points, const FReal Radius1, const FReal Radius2, const FReal Height, const int32 NumPoints, const bool IncludeEndCaps=true, int32 SpiralSeed=0)
Definition TaperedCylinder.h:487
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
static CORE_API const TVector< FRealSingle > ZeroVector
Definition Vector.h:79