UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Gaussians.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "IntVectorTypes.h"
6#include "MathUtil.h"
7#include "VectorTypes.h"
8
9namespace UE
10{
11namespace Geometry
12{
13
14using namespace UE::Math;
15
19template<typename RealType>
21{
22public:
23 RealType Sigma;
24
25 TGaussian1(RealType SigmaIn = 1.0) : Sigma(SigmaIn) {}
26
27 RealType Evaluate(RealType X) const
28 {
29 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
31 }
32
33 RealType EvaluateSqr(RealType XSquared) const
34 {
35 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
37 }
38
39 RealType EvaluateUnscaled(RealType X) const
40 {
41 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
43 }
44
45 RealType EvaluateSqrUnscaled(RealType XSquared) const
46 {
47 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
49 }
50};
53
54
55
56
60template<typename RealType>
62{
63public:
66
67 RealType EvaluateFromOffset(const FVector2i& Offset) const
68 {
69 int32 X = Offset.X + IntRadius;
70 int32 Y = Offset.Y + IntRadius;
71 return Kernel[Y * (2*IntRadius+1) + X];
72 }
73
74};
77
78
79
80
84template<typename RealType>
86{
87public:
88 RealType Sigma;
89
90 TGaussian2(RealType SigmaIn = 1.0) : Sigma(SigmaIn) {}
91
92 RealType Evaluate(const UE::Math::TVector2<RealType>& XY) const
93 {
94 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
96 }
97
99 {
100 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
101 return TMathUtil<RealType>::Exp(-XY.SquaredLength() * InvTwoSigmaSqr);
102 }
103
104
105 static void MakeKernelFromWidth(int32 IntRadius, RealType Sigma, TArray<RealType>& KernelOut, bool bNormalized = true)
106 {
108
109 int32 KernelSize = (2 * IntRadius) + 1;
110 int32 N = KernelSize * KernelSize;
111 KernelOut.SetNum(N);
112
113 RealType InvTwoSigmaSqr = (RealType)1 / ((RealType)2 * Sigma * Sigma);
114 RealType NormalizeFactor = (bNormalized) ? (RealType)1 : (TMathUtil<RealType>::InvPi * InvTwoSigmaSqr);
115
116 FVector2i CenterIdx(IntRadius, IntRadius);
117 RealType KernelSum = 0;
118 for (int32 Y = 0; Y < KernelSize; ++Y)
119 {
120 for (int32 X = 0; X < KernelSize; ++X)
121 {
123 RealType DistSqr = (RealType)RelPos.SquaredLength();
125 KernelSum += KernelOut[Y*KernelSize + X];
126 }
127 }
128 if (bNormalized)
129 {
130 for (int32 k = 0; k < N; ++k)
131 {
132 KernelOut[k] /= KernelSum;
133 }
134 }
135 }
136
137
138 static void MakeKernelFromRadius(RealType Radius, TArray<RealType>& KernelOut, int32& IntRadiusOut, bool bNormalized = true)
139 {
141 RealType Sigma = Radius / (RealType)2; // ??
143 }
144
145
146 static void MakeKernelFromRadius(RealType Radius, TDiscreteKernel2<RealType>& KernelOut, bool bNormalized = true)
147 {
148 KernelOut.IntRadius = (int32)TMathUtil<RealType>::Ceil(Radius);
149 RealType Sigma = Radius / (RealType)2; // ??
150 MakeKernelFromWidth(KernelOut.IntRadius, Sigma, KernelOut.Kernel, bNormalized);
151 }
152
153
154
155};
158
159
160
161
165template<typename RealType>
167{
168public:
169 RealType Sigma;
170
171 TGaussian3(RealType SigmaIn = 1.0) : Sigma(SigmaIn) {}
172
173 RealType Evaluate(const TVector<RealType>& XYZ) const
174 {
175 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
177 }
178
180 {
181 RealType InvTwoSigmaSqr = 1.0 / (2.0 * Sigma * Sigma);
182 return TMathUtil<RealType>::Exp(-XYZ.SquaredLength() * InvTwoSigmaSqr);
183 }
184};
187
188
189} // end namespace UE::Geometry
190} // end namespace UE
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
#define X(Name, Desc)
Definition FormatStringSan.h:47
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition Array.h:670
Definition MathUtil.h:150
static RealType Exp(const RealType Power)
Definition MathUtil.h:408
Definition Gaussians.h:62
int32 IntRadius
Definition Gaussians.h:64
RealType EvaluateFromOffset(const FVector2i &Offset) const
Definition Gaussians.h:67
TArray< RealType > Kernel
Definition Gaussians.h:65
Definition Gaussians.h:21
RealType EvaluateSqr(RealType XSquared) const
Definition Gaussians.h:33
RealType Evaluate(RealType X) const
Definition Gaussians.h:27
TGaussian1(RealType SigmaIn=1.0)
Definition Gaussians.h:25
RealType EvaluateUnscaled(RealType X) const
Definition Gaussians.h:39
RealType Sigma
Definition Gaussians.h:23
RealType EvaluateSqrUnscaled(RealType XSquared) const
Definition Gaussians.h:45
Definition Gaussians.h:86
static void MakeKernelFromRadius(RealType Radius, TDiscreteKernel2< RealType > &KernelOut, bool bNormalized=true)
Definition Gaussians.h:146
RealType Evaluate(const UE::Math::TVector2< RealType > &XY) const
Definition Gaussians.h:92
RealType Sigma
Definition Gaussians.h:88
RealType EvaluateSqrUnscaled(const UE::Math::TVector2< RealType > &XY) const
Definition Gaussians.h:98
TGaussian2(RealType SigmaIn=1.0)
Definition Gaussians.h:90
static void MakeKernelFromWidth(int32 IntRadius, RealType Sigma, TArray< RealType > &KernelOut, bool bNormalized=true)
Definition Gaussians.h:105
static void MakeKernelFromRadius(RealType Radius, TArray< RealType > &KernelOut, int32 &IntRadiusOut, bool bNormalized=true)
Definition Gaussians.h:138
Definition Gaussians.h:167
RealType Evaluate(const TVector< RealType > &XYZ) const
Definition Gaussians.h:173
RealType EvaluateSqrUnscaled(const TVector< RealType > &XYZ) const
Definition Gaussians.h:179
TGaussian3(RealType SigmaIn=1.0)
Definition Gaussians.h:171
RealType Sigma
Definition Gaussians.h:169
TGaussian1< float > TGaussian1f
Definition Gaussians.h:51
TGaussian1< double > TGaussian1d
Definition Gaussians.h:52
TDiscreteKernel2< float > TDiscreteKernel2f
Definition Gaussians.h:75
TGaussian3< double > TGaussian3d
Definition Gaussians.h:186
TGaussian2< float > TGaussian2f
Definition Gaussians.h:156
TDiscreteKernel2< double > TDiscreteKernel2d
Definition Gaussians.h:76
TGaussian2< double > TGaussian2d
Definition Gaussians.h:157
TGaussian3< float > TGaussian3f
Definition Gaussians.h:185
Definition Sphere.cpp:10
Definition AdvancedWidgetsModule.cpp:13
Definition IntVectorTypes.h:20
constexpr int32 SquaredLength() const
Definition IntVectorTypes.h:129
Definition Vector2D.h:38
Definition Vector.h:51