10 struct FTaperedCylinderSpecializeSamplingHelper;
16 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCylinder)
21 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCylinder)
22 , MPlane1(
x1, (
x2 -
x1).GetSafeNormal())
27 , MLocalBoundingBox(
x1,
x1)
37 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCylinder)
38 , MPlane1(
Other.MPlane1)
39 , MPlane2(
Other.MPlane2)
40 , MHeight(
Other.MHeight)
41 , MRadius1(
Other.MRadius1)
42 , MRadius2(
Other.MRadius2)
43 , MLocalBoundingBox(
Other.MLocalBoundingBox)
48 :
FImplicitObject(EImplicitObject::FiniteConvex, ImplicitObjectType::TaperedCylinder)
51 , MHeight(
Other.MHeight)
52 , MRadius1(
Other.MRadius1)
53 , MRadius2(
Other.MRadius2)
113 if (
v.Size() > MRadius1)
115 const FVec3f Corner =
FVec3f(
v.GetSafeNormal()) * MRadius1 + MPlane1.X();
131 if (
v.Size() > MRadius2)
133 const FVec3f Corner =
FVec3f(
v.GetSafeNormal()) * MRadius2 + MPlane2.X();
169 if (MRadius2 > MRadius1)
186 FVec3 Direction = EndPoint - StartPoint;
188 Direction = Direction.GetSafeNormal();
190 auto SMT = StartPoint -
Top;
195 FReal Determinant = b * b - 4 * a * c;
196 if (Determinant == 0)
231 auto Plane1Intersection = MPlane1.FindClosestIntersection(StartPoint, EndPoint, Thickness);
234 auto Plane2Intersection = MPlane2.FindClosestIntersection(StartPoint, EndPoint, Thickness);
238 for (
const auto&
Elem : Intersections)
271 FVec3 GetAxis()
const {
return (MPlane2.X() - MPlane1.X()).GetSafeNormal(); }
277 if (Radius1 == Radius2)
298 return PI_3 * Height * (Radius1 * Radius1 + Radius1 * Radius2 + Radius2 * Radius2);
305 const FReal R1 = FMath::Min(Radius1, Radius2);
306 const FReal R2 = FMath::Max(Radius1, Radius2);
307 const FReal HH = Height * Height;
327 return FRotation3::FromRotatedVector(
FVec3(0, 0, 1),
Axis);
377 if (NumPoints <= 1 ||
435 const int32 NumPoints,
447 const FReal HalfHeight = Height / 2;
492 const int32 NumPoints,
505 UE_PI * Radius2 * (Radius2 + FMath::Sqrt(Height * Height + Radius2 * Radius2)) -
506 UE_PI * Radius1 * (Radius1 + FMath::Sqrt(Height * Height + Radius1 * Radius1));
530 const FReal HalfHeight = Height / 2;
538 for (
int32 i = 0; i < Points2D.
Num(); i++)
585 for (
int32 i = 0; i < Points2D.
Num(); i++)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#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
CHAOS_API FReal SignedDistance(const FVec3 &x) const
Definition ImplicitObject.cpp:105
bool bIsConvex
Definition ImplicitObject.h:572
CHAOS_API Pair< FVec3, bool > FindClosestIntersection(const FVec3 &StartPoint, const FVec3 &EndPoint, const FReal Thickness) const
Definition ImplicitObject.cpp:183
Definition TaperedCylinder.h:13
TArray< FVec3 > ComputeLocalSamplePoints(const FReal PointsPerUnitArea, const bool IncludeEndCaps=true, const int32 MinPoints=0, const int32 MaxPoints=1000) const
Definition TaperedCylinder.h:79
FReal GetRadius2() const
Definition TaperedCylinder.h:249
virtual const FAABB3 BoundingBox() const override
Definition TaperedCylinder.h:102
FVec3 GetOrigin() const
Definition TaperedCylinder.h:257
static FReal GetVolume(const FReal Height, const FReal Radius1, const FReal Radius2)
Definition TaperedCylinder.h:295
TArray< FVec3 > ComputeSamplePoints(const FReal PointsPerUnitArea, const bool IncludeEndCaps=true, const int32 MinPoints=0, const int32 MaxPoints=1000) const
Definition TaperedCylinder.h:99
FReal GetArea(const bool IncludeEndCaps=true) const
Definition TaperedCylinder.h:273
TArray< FVec3 > ComputeSamplePoints(const int32 NumPoints, const bool IncludeEndCaps=true) const
Definition TaperedCylinder.h:606
FReal GetRadius1() const
Definition TaperedCylinder.h:248
FReal GetHeight() const
Definition TaperedCylinder.h:250
virtual uint32 GetTypeHash() const override
Definition TaperedCylinder.h:330
FVec3 GetCenter() const
Definition TaperedCylinder.h:262
FTaperedCylinder()
Definition TaperedCylinder.h:15
FVec3 GetX1() const
Definition TaperedCylinder.h:252
TArray< FVec3 > ComputeLocalSamplePoints(const int32 NumPoints, const bool IncludeEndCaps=true) const
Definition TaperedCylinder.h:595
static constexpr EImplicitObjectType StaticType()
Definition TaperedCylinder.h:60
FVec3 GetInsertion() const
Definition TaperedCylinder.h:260
const FVec3f & GetInsertionf() const
Definition TaperedCylinder.h:261
FRotation3 GetRotationOfMass() const
Definition TaperedCylinder.h:322
FVec3 GetX2() const
Definition TaperedCylinder.h:254
const FVec3f & GetOriginf() const
Definition TaperedCylinder.h:258
FVec3 GetAxis() const
Definition TaperedCylinder.h:271
static FRotation3 GetRotationOfMass(const FVec3 &Axis)
Definition TaperedCylinder.h:323
static FReal GetArea(const FReal Height, const FReal Radius1, const FReal Radius2, const bool IncludeEndCaps)
Definition TaperedCylinder.h:274
FTaperedCylinder(const FTaperedCylinder &Other)
Definition TaperedCylinder.h:36
const FVec3f & GetX1f() const
Definition TaperedCylinder.h:253
Pair< FVec3, bool > FindClosestIntersection(const FVec3 &StartPoint, const FVec3 &EndPoint, const FReal Thickness)
Definition TaperedCylinder.h:160
FTaperedCylinder(const FVec3 &x1, const FVec3 &x2, const FReal Radius1, const FReal Radius2)
Definition TaperedCylinder.h:20
const FVec3f & GetX2f() const
Definition TaperedCylinder.h:255
FMatrix33 GetInertiaTensor(const FReal Mass) const
Definition TaperedCylinder.h:301
FVec3 GetCenterOfMass() const
Definition TaperedCylinder.h:264
FReal GetSlantHeight() const
Definition TaperedCylinder.h:251
~FTaperedCylinder()
Definition TaperedCylinder.h:58
static FMatrix33 GetInertiaTensor(const FReal Mass, const FReal Height, const FReal Radius1, const FReal Radius2)
Definition TaperedCylinder.h:302
FReal GetVolume() const
Definition TaperedCylinder.h:294
FTaperedCylinder(FTaperedCylinder &&Other)
Definition TaperedCylinder.h:47
FReal PhiWithNormal(const FVec3 &x, FVec3 &Normal) const
Definition TaperedCylinder.h:104
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
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
UE_NODEBUG void Sort()
Definition Array.h:3418
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
@ TaperedCylinder
Definition ImplicitObjectType.h:22
Definition SkeletalMeshComponent.h:307
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
Pair< T1, T2 > MakePair(const T1 &First, const T2 &Second)
Definition Pair.h:45
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
TAABB< FReal, 3 > FAABB3
Definition ImplicitObject.h:34
TVector< FReal, 2 > FVec2
Definition Core.h:16
float v
Definition radaudio_mdct.cpp:62
Definition TaperedCylinder.h:372
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 bool IncludeEndCaps=true, int32 SpiralSeed=0)
Definition TaperedCylinder.h:428
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 FORCEINLINE void ComputeSamplePoints(TArray< FVec3 > &Points, const FTaperedCylinder &Cylinder, const int32 NumPoints, const bool IncludeEndCaps=true)
Definition TaperedCylinder.h:373
static FORCEINLINE void ComputeGoldenSpiralPoints(TArray< FVec3 > &Points, const FTaperedCylinder &Cylinder, const int32 NumPoints, const bool IncludeEndCaps=true)
Definition TaperedCylinder.h:399
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 constexpr UE_FORCEINLINE_HINT T LerpStable(const T &A, const T &B, double Alpha)
Definition UnrealMathUtility.h:1147
T Size() const
Definition Vector.h:1716