UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ConvexHull2.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Adapted from GteConvexHull2.h from GTEngine; see Private/ThirdParty/GTEngine/Mathematics/GteConvexHull2.h
4
5#pragma once
6
7#include "Containers/Array.h"
9#include "CoreMinimal.h"
10#include "IndexTypes.h"
11#include "LineTypes.h"
12#include "Math/UnrealMathSSE.h"
13#include "Math/Vector2D.h"
14#include "MathUtil.h"
16#include "PlaneTypes.h"
17#include "Polygon2.h"
18#include "Templates/Function.h"
19
20
21namespace UE {
22namespace Geometry {
23
24using namespace UE::Math;
25
26
27template<typename RealType>
29{
30public:
31
43
54 GEOMETRYCORE_API bool Solve(int32 NumPoints, TFunctionRef<TVector2<RealType>(int32)> GetPointFunc, TFunctionRef<bool(int32)> FilterFunc = [](int32 Idx) {return true;});
55
65 bool Solve(TArrayView<const TVector2<RealType>> Points, TFunctionRef<bool(int32)> FilterFunc)
66 {
67 return Solve(Points.Num(), [&Points](int32 Idx)
68 {
69 return Points[Idx];
70 }, FilterFunc);
71 }
72
73 // default FilterFunc version of the above Solve(); workaround for clang bug https://bugs.llvm.org/show_bug.cgi?id=25333
83 {
84 return Solve(Points.Num(), [&Points](int32 Idx)
85 {
86 return Points[Idx];
87 }, [](int32 Idx) {return true;});
88 }
89
92 {
93 return Dimension == 2;
94 }
95
100 void Empty()
101 {
102 Dimension = 0;
103 NumUniquePoints = 0;
104 Hull.Empty();
105 }
106
108 inline int32 GetDimension() const
109 {
110 return Dimension;
111 }
112
115 {
116 return NumUniquePoints;
117 }
118
121 {
123 return Hull;
124 }
125
128 {
129 ensure(Dimension == 1);
130 if (ensure(Hull.Num() > 1))
131 {
132 return TLine2<RealType>::FromPoints(Points[Hull[0]], Points[Hull[1]]);
133 }
134 return TLine2<RealType>(); // not enough points to compute a valid line, return default
135 }
136
137protected:
138
139 // divide-and-conquer algorithm
143
147};
148
151
152
153
154} // end namespace UE::Geometry
155} // end namespace UE
#define ensure( InExpression)
Definition AssertionMacros.h:464
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition AssetRegistryState.h:50
Definition ConvexHull2.h:29
TArray< int32 > const & GetPolygonIndices() const
Definition ConvexHull2.h:120
bool Solve(TArrayView< const TVector2< RealType > > Points, TFunctionRef< bool(int32)> FilterFunc)
Definition ConvexHull2.h:65
GEOMETRYCORE_API bool Solve(int32 NumPoints, TFunctionRef< TVector2< RealType >(int32)> GetPointFunc, TFunctionRef< bool(int32)> FilterFunc=[](int32 Idx) {return true;})
Definition ConvexHull2.cpp:118
bool IsSolutionAvailable() const
Definition ConvexHull2.h:91
int32 Dimension
Definition ConvexHull2.h:144
TLine2< RealType > GetLine(TArrayView< const TVector2< RealType > > Points) const
Definition ConvexHull2.h:127
int32 NumUniquePoints
Definition ConvexHull2.h:145
void Empty()
Definition ConvexHull2.h:100
bool Solve(TArrayView< const TVector2< RealType > > Points)
Definition ConvexHull2.h:82
GEOMETRYCORE_API bool SolveSimplePolygon(int32 NumPolygonPoints, TFunctionRef< TVector2< RealType >(int32)> GetPointFunc, bool bIsKnownCCW=false)
Definition ConvexHull2.cpp:27
void GetHull(TFunctionRef< TVector2< RealType >(int32)> GetPointFunc, TArray< int32 > &Merged, int32 &IdxFirst, int32 &IdxLast)
Definition ConvexHull2.cpp:187
int32 GetDimension() const
Definition ConvexHull2.h:108
void GetTangent(TFunctionRef< TVector2< RealType >(int32)> GetPointFunc, TArray< int32 > &Merged, int32 j0, int32 j1, int32 j2, int32 j3, int32 &i0, int32 &i1)
Definition ConvexHull2.cpp:340
TArray< int32 > Hull
Definition ConvexHull2.h:146
int32 GetNumUniquePoints() const
Definition ConvexHull2.h:114
TConvexHull2< float > FConvexHull2f
Definition ConvexHull2.h:149
TConvexHull2< double > FConvexHull2d
Definition ConvexHull2.h:150
Definition Sphere.cpp:10
Definition AdvancedWidgetsModule.cpp:13
Definition LineTypes.h:23
static TLine2< T > FromPoints(const TVector2< T > &Point0, const TVector2< T > &Point1)
Definition LineTypes.h:51
Definition Vector2D.h:38