49 template<
typename OtherVertexType>
66 for (
int32 Idx = 0; Idx < VertexIndices.
Num(); Idx++)
169 return CurveUtil::Tangent<T, TVector2<T>,
true>(
Vertices, VertexIndex);
190 return CurveUtil::GetNormal_FaceAvg2<T, TVector2<T>,
true>(
Vertices, VertexIndex);
280 return CurveUtil::SignedArea2<T, TVector2<T>>(
Vertices);
296 return CurveUtil::ArcLength<T, TVector2<T>>(
Vertices,
true);
368 for (
int i = 0, N =
OtherPoly.VertexCount(); i < N; ++i)
388 if (seg.Intersects(
oseg))
405 for (
int i = 0; i < N; ++i)
466 if (seg.Intersects(
oseg))
519 if (seg.Intersects(
oseg))
527 if (
intr.Quantity == 2)
556 return seg.
PointAt(SegmentParam);
579 T t = ((SegmentParam / seg.
Extent) + 1.0) / 2.0;
601 for (
int vi = 0;
vi < N; ++
vi)
611 else if (t <= -seg.
Extent)
648 for (
int i = 1; i < N; ++i) {
663 for (
int i = 0; i < N; ++i)
677 for (
int i = 0; i < N; ++i)
692 for (
int i = 0; i < N; ++i)
713 for (
int k = 0; k <
Vertices.Num(); ++k)
720 for (
int k = 0; k <
Vertices.Num(); ++k)
725 for (
int k = 0; k <
Vertices.Num(); ++k)
742 for (
int k = 0; k <
Vertices.Num(); ++k)
758 for (
int k = 0; k <
Vertices.Num(); ++k)
785 T
tol2 = Tolerance * Tolerance;
790 for (
int i = j + 1; i < k; i++)
804 SimplifyDouglasPeucker(Tolerance,
Vertices, j,
maxi, Marked);
805 SimplifyDouglasPeucker(Tolerance,
Vertices,
maxi, k, Marked);
831 Marked.SetNumUninitialized(n + 1);
832 for (i = 0; i < n + 1; ++i)
840 for (i = 1, k = 1,
pv = 0; i < n; i++)
878 Marked[0] = Marked[k - 1] =
true;
880 for (i = 0; i < k - 1; ++i)
890 for (i = 0; i < k; ++i)
900 for (i = 1; i < k - 1; ++i)
902 if (Marked[1] ==
false)
906 else if (Marked[k - 2] ==
false)
908 Marked[k - 2] =
true;
922 for (i = 0; i < k - 1; ++i)
951 int iPrev = (iCur == 0) ? N - 1 : iCur - 1;
953 int iNext = (iCur + 1) % N;
1054 for (
int i = 0; i < Steps; ++i)
1056 T t = (T)i / (T)Steps;
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
int prev(int i, int n)
Definition RecastMesh.cpp:163
int next(int i, int n)
Definition RecastMesh.cpp:164
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
Definition AndroidPlatformMisc.h:14
Definition MathUtil.h:150
static RealType Cos(const RealType Value)
Definition MathUtil.h:372
static RealType Sin(const RealType Value)
Definition MathUtil.h:366
static RealType Clamp(const RealType Value, const RealType ClampMin, const RealType ClampMax)
Definition MathUtil.h:222
static RealType Abs(const RealType Value)
Definition MathUtil.h:215
static RealType Min(const RealType A, const RealType B)
Definition MathUtil.h:271
Definition IntrSegment2Segment2.h:57
Definition Polygon2.h:249
SegmentEnumerable(const TPolygon2< T > *p)
Definition Polygon2.h:253
SegmentIterator end()
Definition Polygon2.h:255
SegmentIterator begin()
Definition Polygon2.h:254
const TPolygon2< T > * polygon
Definition Polygon2.h:251
SegmentEnumerable()
Definition Polygon2.h:252
Definition Polygon2.h:207
SegmentIterator(const TPolygon2 *p, int iCur)
Definition Polygon2.h:235
SegmentIterator operator++(int)
Definition Polygon2.h:224
SegmentIterator & operator++()
Definition Polygon2.h:219
bool operator!=(const SegmentIterator &i2) const
Definition Polygon2.h:231
TSegment2< T > operator*() const
Definition Polygon2.h:213
bool operator!()
Definition Polygon2.h:209
int i
Definition Polygon2.h:234
const TPolygon2 * polygon
Definition Polygon2.h:233
bool operator==(const SegmentIterator &i2) const
Definition Polygon2.h:230
SegmentIterator SegmentItr() const
Definition Polygon2.h:240
void RemoveVertex(int VertexIndex)
Definition Polygon2.h:140
bool IsConvex(T RadiansTolerance=TMathUtil< T >::ZeroTolerance, bool bDegenerateIsConvex=true) const
Definition Polygon2.h:342
static TPolygon2< T > MakeRectangle(const TVector2< T > &Center, T Width, T Height)
Definition Polygon2.h:1002
T AverageEdgeLength() const
Definition Polygon2.h:645
TVector2< T > GetSegmentPointUnitParam(int SegmentIndex, T SegmentParam) const
Definition Polygon2.h:564
bool Intersects(const TPolygon2< T > &OtherPoly) const
Definition Polygon2.h:455
TVector2< T > & operator[](int Index)
Definition Polygon2.h:83
int VertexCount() const
Definition Polygon2.h:108
TPolygon2(const TArray< TVector2< T > > &VertexList)
Definition Polygon2.h:45
TVector2< T > GetNormal(int VertexIndex) const
Definition Polygon2.h:177
T DistanceSquared(const TVector2< T > &QueryPoint) const
Definition Polygon2.h:635
SegmentEnumerable Segments() const
Definition Polygon2.h:261
void VtxNormalOffset(T OffsetDistance, bool bUseFaceAvg=false)
Definition Polygon2.h:707
TPolygon2< T > & Transform(const TFunction< TVector2< T >(const TVector2< T > &)> &TransformFunc)
Definition Polygon2.h:689
TVector2< T > GetSegmentPoint(int SegmentIndex, T SegmentParam) const
Definition Polygon2.h:553
TPolygon2< T > & Scale(const TVector2< T > &Scale, const TVector2< T > &Origin)
Definition Polygon2.h:674
bool IsClockwise() const
Definition Polygon2.h:270
void Simplify(T ClusterTolerance=0.0001, T LineDeviationTolerance=0.01)
Definition Polygon2.h:819
bool Contains(const TSegment2< T > &Segment) const
Definition Polygon2.h:425
TPolygon2< T > & Translate(const TVector2< T > &Translate)
Definition Polygon2.h:660
T Area() const
Definition Polygon2.h:286
bool Overlaps(const TPolygon2< T > &OtherPoly) const
Definition Polygon2.h:361
const TVector2< T > & operator[](int Index) const
Definition Polygon2.h:75
void SetVertices(const TArray< TVector2< T > > &NewVertices)
Definition Polygon2.h:148
T Perimeter() const
Definition Polygon2.h:294
bool Contains(const TVector2< T > &QueryPoint) const
Definition Polygon2.h:351
void Reverse()
Definition Polygon2.h:157
void NeighbourVectors(int VertexIdx, TVector2< T > &OutToPrev, TVector2< T > &OutToNext, bool bNormalize=false) const
Definition Polygon2.h:312
const TArray< TVector2< T > > & GetVertices() const
Definition Polygon2.h:100
void ClipConvex(const TAxisAlignedBox2< T > &Bounds)
Definition Polygon2.h:446
static TPolygon2< T > MakeCircle(T Radius, int Steps, T AngleShiftRadians=0)
Definition Polygon2.h:1049
bool FindIntersections(const TPolygon2< T > &OtherPoly, TArray< TVector2< T > > &OutArray) const
Definition Polygon2.h:505
bool Intersects(const TSegment2< T > &Segment) const
Definition Polygon2.h:479
TVector2< T > GetTangent(int VertexIndex) const
Definition Polygon2.h:167
void AppendVertices(const TArray< TVector2< T > > &NewVertices)
Definition Polygon2.h:124
TArray< TVector2< T > > Vertices
Definition Polygon2.h:34
TAxisAlignedBox2< T > Bounds() const
Definition Polygon2.h:197
void Set(int VertexIndex, const TVector2< T > &Position)
Definition Polygon2.h:132
static TPolygon2< T > MakeRoundedRectangle(const TVector2< T > &Center, T Width, T Height, T Corner, int CornerSteps)
Definition Polygon2.h:1016
TPolygon2()
Definition Polygon2.h:38
void Chamfer(T ChamferDist, T MinConvexAngleDeg=30, T MinConcaveAngleDeg=30)
Definition Polygon2.h:939
void NeighbourPoints(int VertexIdx, TVector2< T > &OutPrevNbr, TVector2< T > &OutNextNbr) const
Definition Polygon2.h:303
T DistanceSquared(const TVector2< T > &QueryPoint, int &NearestSegIndexOut, T &NearestSegParamOut) const
Definition Polygon2.h:595
TPolygon2(const TArray< OtherVertexType > &VertexList)
Definition Polygon2.h:50
TSegment2< T > Segment(int SegmentIndex) const
Definition Polygon2.h:543
TVector2< T > GetNormal_FaceAvg(int VertexIndex) const
Definition Polygon2.h:188
T SignedArea() const
Definition Polygon2.h:278
bool Contains(const TPolygon2< T > &OtherPoly) const
Definition Polygon2.h:400
TPolygon2(TArrayView< const TVector2< T > > VertexArray, TArrayView< const int32 > VertexIndices)
Definition Polygon2.h:63
TVector2< T > GetNormal(int iSeg, T SegmentParam) const
Definition Polygon2.h:576
T OpeningAngleDeg(int iVertex) const
Definition Polygon2.h:321
T WindingIntegral(const TVector2< T > &QueryPoint) const
Definition Polygon2.h:332
void AppendVertex(const TVector2< T > &Position)
Definition Polygon2.h:116
void PolyOffset(T OffsetDistance)
Definition Polygon2.h:736
const TVector2< T > & Start() const
Definition Polygon2.h:92
UE_REWRITE void Reverse(T(&Array)[ArraySize])
Definition Reverse.h:28
TPolygon2< float > FPolygon2f
Definition Polygon2.h:1067
constexpr UE::Math::TVector2< T > PerpCW(const UE::Math::TVector2< T > &V)
Definition VectorTypes.h:26
T AngleD(const UE::Math::TVector2< T > &V1, const UE::Math::TVector2< T > &V2)
Definition VectorTypes.h:92
constexpr T DotPerp(const UE::Math::TVector2< T > &V1, const UE::Math::TVector2< T > &V2)
Definition VectorTypes.h:19
T DistanceSquared(const UE::Math::TVector2< T > &V1, const UE::Math::TVector2< T > &V2)
Definition VectorTypes.h:82
T SquaredLength(const UE::Math::TVector< T > &V)
Definition VectorTypes.h:154
TPolygon2< double > FPolygon2d
Definition Polygon2.h:1066
T Normalize(UE::Math::TVector2< T > &Vector, const T Epsilon=0)
Definition VectorTypes.h:46
Definition AdvancedWidgetsModule.cpp:13
Definition ClothingSystemRuntimeModuleNv.h:10
float v
Definition radaudio_mdct.cpp:62
U16 Index
Definition radfft.cpp:71
Definition NumericLimits.h:41
Definition BoxTypes.h:637
TVector2< RealType > Max
Definition BoxTypes.h:639
TVector2< RealType > Min
Definition BoxTypes.h:638
Definition LineTypes.h:23
bool IntersectionPoint(const TLine2< T > &OtherLine, TVector2< T > &IntersectionPointOut, T ParallelDotTolerance=TMathUtil< T >::ZeroTolerance) const
Definition LineTypes.h:115
Definition SegmentTypes.h:23
TVector2< T > EndPoint() const
Definition SegmentTypes.h:85
TVector2< T > PointBetween(T UnitParameter) const
Definition SegmentTypes.h:115
T Extent
Definition SegmentTypes.h:30
TVector2< T > StartPoint() const
Definition SegmentTypes.h:79
TVector2< T > Direction
Definition SegmentTypes.h:28
TVector2< T > Center
Definition SegmentTypes.h:26
TVector2< T > PointAt(T DistanceParameter) const
Definition SegmentTypes.h:106