32 static_assert(std::is_floating_point_v<T>,
"TVector4 only supports float and double types.");
93 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
159 template<
typename IntType>
181 return TVector4(T(0), T(0), T(0), T(0));
187 return TVector4(T(1), T(1), T(1), T(1));
253 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
256 return TVector4<T>(
X + (T)Bias,
Y + (T)Bias,
Z + (T)Bias,
W + (T)Bias);
265 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
268 return TVector4<T>(
X - (T)Bias,
Y - (T)Bias,
Z - (T)Bias,
W - (T)Bias);
277 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
289 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
334 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
348 template<
typename FArg UE_REQUIRES(std::is_arithmetic_v<FArg>)>
544#if ENABLE_NAN_DIAGNOSTIC
575 if constexpr (std::is_same_v<T, float>)
586 template<
typename FArg UE_REQUIRES(std::is_same_v<FArg,
double> && std::is_same_v<T,
float>)>
590 template<
typename FArg UE_REQUIRES(std::is_same_v<FArg,
float> && std::is_same_v<T,
double>)>
615 return Ar << V.
X << V.
Y << V.
Z << V.
W;
622 Ar << V.
X << V.
Y << V.
Z << V.
W;
629 Ar <<
X <<
Y <<
Z <<
W;
688template<
typename IntType>
719 DiagnosticCheckNaN();
740 X += V.
X;
Y += V.
Y;
Z += V.
Z; W += V.
W;
741 DiagnosticCheckNaN();
756 X -= V.
X;
Y -= V.
Y;
Z -= V.
Z; W -= V.
W;
757 DiagnosticCheckNaN();
802 return (
Index >= 0) && (
Index < NumComponents);
808 return ((
X == V.
X) && (
Y == V.
Y) && (
Z == V.
Z) && (W == V.
W));
815 return ((
X != V.
X) || (
Y != V.
Y) || (
Z != V.
Z) || (W != V.
W));
822 return FMath::Abs(
X-V.
X) <= Tolerance && FMath::Abs(
Y-V.
Y) <= Tolerance && FMath::Abs(
Z-V.
Z) <= Tolerance && FMath::Abs(W-V.
W) <= Tolerance;
829 return FString::Printf(
TEXT(
"X=%3.3f Y=%3.3f Z=%3.3f W=%3.3f"),
X,
Y,
Z, W);
884 return FMath::Sqrt(
X*
X +
Y*
Y +
Z*
Z);
897 return FMath::Sqrt(
X*
X +
Y*
Y +
Z*
Z + W*W);
903 return X*
X +
Y*
Y +
Z*
Z + W*W;
917 return (!FMath::IsFinite(
X) ||
918 !FMath::IsFinite(
Y) ||
919 !FMath::IsFinite(
Z) ||
920 !FMath::IsFinite(W));
928 FMath::Abs(
X)<=Tolerance
929 && FMath::Abs(
Y)<=Tolerance
930 && FMath::Abs(
Z)<=Tolerance;
937 FMath::Abs(
X)<=Tolerance
938 && FMath::Abs(
Y)<=Tolerance
939 && FMath::Abs(
Z)<=Tolerance
940 && FMath::Abs(W)<=Tolerance;
946 X *= V.
X;
Y *= V.
Y;
Z *= V.
Z; W *= V.
W;
947 DiagnosticCheckNaN();
955 X /= V.
X;
Y /= V.
Y;
Z /= V.
Z; W /= V.
W;
956 DiagnosticCheckNaN();
1020 return V1.X * V2.X + V1.Y * V2.Y + V1.Z * V2.Z;
1035 return V1.X * V2.X + V1.Y * V2.Y + V1.Z * V2.Z;
1041 return V1.X * V2.X + V1.Y * V2.Y + V1.Z * V2.Z;
1054 return V1.X * V2.X + V1.Y * V2.Y + V1.Z * V2.Z + V1.W * V2.W;
1068 template<
typename T,
typename T2 UE_REQUIRES(std::is_arithmetic_v<T2>)>
1071 return V.operator*(
Scale);
1075 template<
typename T>
1082 template<
typename T>
1085 const T
NX = FMath::Abs(
X);
1086 const T
NY = FMath::Abs(
Y);
1087 const T
NZ = FMath::Abs(
Z);
1093 Axis1 = (Axis1 - *
this *
Dot3(Axis1, *
this)).GetSafeNormal();
1094 Axis2 = Axis1 ^ *
this;
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
ENoInit
Definition CoreMiscDefines.h:158
EForceInit
Definition CoreMiscDefines.h:154
#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
#define UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(AR_OR_SLOT, ALIAS, TYPE, ALT_TYPE)
Definition LargeWorldCoordinatesSerializer.h:9
#define UE_DECLARE_LWC_TYPE(...)
Definition LargeWorldCoordinates.h:27
#define logOrEnsureNanError(_FormatString_,...)
Definition LogMacros.h:436
#define DECLARE_INTRINSIC_TYPE_LAYOUT(T)
Definition MemoryLayout.h:760
@ LARGE_WORLD_COORDINATES
#define UE_REQUIRES(...)
Definition Requires.h:86
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
UE_FORCEINLINE_HINT T Dot4(const UE::Math::TVector4< T > &V1, const UE::Math::TVector4< T > &V2)
Definition Vector4.h:1052
UE_FORCEINLINE_HINT T Dot3(const UE::Math::TVector4< T > &V1, const UE::Math::TVector4< T > &V2)
Definition Vector4.h:1018
Definition Archive.h:1208
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
UE_FORCEINLINE_HINT FPackageFileVersion UEVer() const
Definition Archive.h:204
Definition NameTypes.h:617
FArchive & operator<<(FArchive &Ar, TBoxSphereBounds< float, float > &Bounds)
Definition BoxSphereBounds.h:396
UE_FORCEINLINE_HINT TQuat< T > operator*(const float Scale, const TQuat< T > &Q)
Definition Quat.h:1055
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
static CORE_API uint32 MemCrc_DEPRECATED(const void *Data, int32 Length, uint32 CRC=0)
Definition Crc.cpp:592
static CORE_API bool Value(const TCHAR *Stream, const TCHAR *Match, FName &Name)
Definition Parse.cpp:584
@ Value
Definition Array.h:46
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition IsUECoreType.h:19
@ Value
Definition IsUECoreType.h:20
Definition IntVector.h:1216
UE_FORCEINLINE_HINT void DiagnosticCheckNaN()
Definition Vector2D.h:683
CORE_API TQuat< T > ToOrientationQuat() const
Definition UnrealMath.cpp:308
TVector4 GetSafeNormal(T Tolerance=UE_SMALL_NUMBER) const
Definition Vector4.h:850
static TVector4< T > Zero()
Definition Vector4.h:179
bool operator==(const TVector4< T > &V) const
Definition Vector4.h:806
T Size3() const
Definition Vector4.h:882
T SizeSquared() const
Definition Vector4.h:901
CORE_API TRotator< T > ToOrientationRotator() const
Definition UnrealMath.cpp:259
TVector4(const UE::Math::TVector< T > &InVector)
Definition Vector4.h:640
TVector4< T > operator/=(FArg Scale)
Definition Vector4.h:349
TVector4< T > operator/=(const TVector4< T > &V)
Definition Vector4.h:953
UE_FORCEINLINE_HINT T operator[](int32 ComponentIndex) const
Definition Vector4.h:705
TVector4< T > operator+=(const TVector4< T > &V)
Definition Vector4.h:738
TVector4(EForceInit)
Definition Vector4.h:661
UE_FORCEINLINE_HINT TRotator< T > Rotation() const
Definition Vector4.h:477
UE_FORCEINLINE_HINT TVector4< T > operator*(FArg Scale) const
Definition Vector4.h:278
TVector4(T InX=0.0f, T InY=0.0f, T InZ=0.0f, T InW=1.0f)
Definition Vector4.h:650
T Y
Definition Vector4.h:46
FString ToString() const
Definition Vector4.h:827
bool IsValidIndex(int32 Index) const
Definition Vector4.h:800
TVector4(const FLinearColor &InColor, T InOverrideW)
Definition Vector4.h:123
static CORE_API constexpr int32 NumComponents
Definition Vector4.h:60
TVector4(const TVector4< FArg > &From)
Definition Vector4.h:587
TVector4< T > operator/(FArg Scale) const
Definition Vector4.h:290
UE_FORCEINLINE_HINT TVector4< T > operator-(const TVector4< T > &V) const
Definition Vector4.h:747
const T & Component(int32 Index) const
Definition Vector4.h:791
bool Equals(const TVector4< T > &V, T Tolerance=UE_KINDA_SMALL_NUMBER) const
Definition Vector4.h:820
TVector4< T > operator*=(FArg Scale)
Definition Vector4.h:335
UE_FORCEINLINE_HINT TVector4< T > operator-(FArg Bias) const
Definition Vector4.h:266
void FindBestAxisVectors3(TVector4< T > &Axis1, TVector4< T > &Axis2) const
Definition Vector4.h:1083
TVector4(TVector2< T > InXY, TVector2< T > InZW)
Definition Vector4.h:678
TVector4(const UE::Math::TVector4< T > &InVector, FArg OverrideW)
Definition Vector4.h:94
T SizeSquared3() const
Definition Vector4.h:889
T XYZW[4]
Definition Vector4.h:56
UE_FORCEINLINE_HINT TVector4< T > operator+(const TVector4< T > &V) const
Definition Vector4.h:731
UE_FORCEINLINE_HINT void DiagnosticCheckNaN()
Definition Vector4.h:555
UE_FORCEINLINE_HINT TVector4< T > operator-() const
Definition Vector4.h:724
UE_FORCEINLINE_HINT T & operator[](int32 ComponentIndex)
Definition Vector4.h:698
TVector4< T > operator*(const TVector4< T > &V) const
Definition Vector4.h:763
T & Component(int32 Index)
Definition Vector4.h:782
TVector4(ENoInit)
Definition Vector4.h:672
TVector4< T > operator-=(const TVector4< T > &V)
Definition Vector4.h:754
TVector4< T > operator^(const TVector4< T > &V) const
Definition Vector4.h:770
bool IsNearlyZero(T Tolerance=UE_KINDA_SMALL_NUMBER) const
Definition Vector4.h:934
bool operator!=(const TVector4< T > &V) const
Definition Vector4.h:813
bool ContainsNaN() const
Definition Vector4.h:915
void Set(T InX, T InY, T InZ, T InW)
Definition Vector4.h:712
UE_FORCEINLINE_HINT friend uint32 GetTypeHash(const UE::Math::TVector4< T > &Vector)
Definition Vector4.h:600
TVector4< T > ComponentMax(const TVector4< T > &Other) const
Definition Vector4.h:876
bool IsNearlyZero3(T Tolerance=UE_KINDA_SMALL_NUMBER) const
Definition Vector4.h:925
TVector4(const TIntVector4< IntType > &InVector)
bool InitFromString(const FString &InSourceString)
Definition Vector4.h:834
bool SerializeFromMismatchedTag(FName StructTag, FArchive &Ar)
Definition Vector4.h:568
TVector4< T > ComponentMin(const TVector4< T > &Other) const
Definition Vector4.h:870
TVector4 GetUnsafeNormal3() const
Definition Vector4.h:863
TVector4< T > Reflect3(const TVector4< T > &Normal) const
Definition Vector4.h:1076
TVector4< T > operator/(const TVector4< T > &V) const
Definition Vector4.h:962
TVector4< T > operator*=(const TVector4< T > &V)
Definition Vector4.h:944
T Size() const
Definition Vector4.h:895
TVector4(const FLinearColor &InColor)
Definition Vector4.h:108
T Z
Definition Vector4.h:49
T W
Definition Vector4.h:52
bool Serialize(FArchive &Ar)
Definition Vector4.h:562
static TVector4< T > One()
Definition Vector4.h:185
T X
Definition Vector4.h:43
UE_FORCEINLINE_HINT TVector4< T > operator+(FArg Bias) const
Definition Vector4.h:254
bool IsUnit3(T LengthSquaredTolerance=UE_KINDA_SMALL_NUMBER) const
Definition Vector4.h:908
T FReal
Definition Vector4.h:36
UE_FORCEINLINE_HINT void DiagnosticCheckNaN() const
Definition Vector.h:147
T X
Definition Vector.h:62