CARLA
 
载入中...
搜索中...
未找到
DVector.h
浏览该文件的文档.
1// Copyright (c) 2021 Computer Vision Center (CVC) at the Universitat Autonoma de Barcelona (UAB).
2// This work is licensed under the terms of the MIT license.
3// For a copy, see <https://opensource.org/licenses/MIT>.
4
5#pragma once
6
7#include <cmath>
8
9//理想情况下,这个(结构体定义)本可以直接包含在虚幻引擎(Unreal)中,但那样使用起来可能会比较低效。这是一个代码相关的注释,用于说明这段代码的一些背景或者设想情况
11{
12
13 double X = 0.0;
14// 定义结构体成员变量 X,类型为双精度浮点数(double),初始化为0.0,用于表示向量在 X 维度上的分量
15 double Y = 0.0;
16 double Y = 0.0;
17// 定义结构体成员变量 Y,类型为双精度浮点数(double),初始化为0.0,用于表示向量在 Y 维度上的分量
18 double Z = 0.0;
19 // 定义结构体成员变量 Z,类型为双精度浮点数(double),初始化为0.0,用于表示向量在 Z 维度上的分量
20
21 FDVector() : X(0.0), Y(0.0), Z(0.0) {}
22 // 定义默认构造函数,使用初始化列表将成员变量 X、Y、Z 都初始化为0.0,用于创建一个默认的(各分量都为0的)向量对象
23
24 FDVector(float InX, float InY, float InZ) : X(InX), Y(InY), Z(InZ) {}
25// 定义一个构造函数,接收三个单精度浮点数(float)类型的参数 InX、InY、InZ,
26 // 通过初始化列表分别将成员变量 X、Y、Z 初始化为传入的对应参数值,用于根据给定的浮点数分量创建向量对象
27
28 FDVector(double InX, double InY, double InZ) : X(InX), Y(InY), Z(InZ) {}
29// 定义一个构造函数,接收三个双精度浮点数(double)类型的参数 InX、InY、InZ,
30 // 同样利用初始化列表把成员变量 X、Y、Z 初始化为传入的相应参数值,方便以双精度浮点数形式给定分量来创建向量对象
31
32 FDVector(const FVector& V) : X(V.X), Y(V.Y), Z(V.Z) {}
33// 定义一个构造函数,接收一个常量引用类型的 FVector 参数 V(FVector 可能是虚幻引擎中已有的表示向量的类型),
34 // 通过初始化列表将本结构体的成员变量 X、Y、Z 分别初始化为传入的 FVector 参数的对应分量值,
35 // 用于从已有的 FVector 类型对象来创建本结构体表示的向量对象
36
37 FDVector(const FIntVector& V) : X(V.X), Y(V.Y), Z(V.Z) {}//构造函数,使用初始化列表来初始化
38// 定义一个构造函数,接收一个常量引用类型的 FIntVector 参数 V(FIntVector 可能是虚幻引擎中表示整型向量的类型),
39 // 通过初始化列表将成员变量 X、Y、Z 分别初始化为传入的 FIntVector 参数的对应分量值,
40 // 从而可以基于整型向量对象来创建本结构体的向量对象,注释再次强调了使用初始化列表来进行初始化的操作方式
41
42 double Size() const
43// 定义一个成员函数 Size,返回类型为双精度浮点数(double),函数被声明为 const,意味着调用该函数不会修改对象的状态,
44 // 其功能是用于计算并返回向量的长度(通常是根据向量各分量通过勾股定理计算向量的模长)
45 {
46 return std::sqrt(X*X + Y*Y + Z*Z);//用于计算并返回向量长度
47 }
48
49 double SizeSquared() const//用于返回向量长度的平方
50 {
51 return X*X + Y*Y + Z*Z; // 直接返回向量各分量的平方和,也就是向量长度的平方
52 }
53
54 static double Dist(const FDVector &V1, const FDVector &V2)//用于计算距离的静态函数
55 {
56 return std::sqrt(FDVector::DistSquared(V1, V2)); // 通过调用本类的静态函数 DistSquared 先计算两个向量距离的平方,然后再使用 std::sqrt 函数取平方根,得到实际的距离值
57 }
58
59 static double DistSquared(const FDVector &V1, const FDVector &V2)
60 // 定义一个静态成员函数 DistSquared,接收两个常量引用类型的 FDVector 参数 V1 和 V2,返回类型为双精度浮点数(double),
61 // 用于计算两个向量之间距离的平方(同样常用于一些比较距离相关情况,避免开方运算来提高效率等)
62 {
63 return FMath::Square(V2.X-V1.X) + FMath::Square(V2.Y-V1.Y) + FMath::Square(V2.Z-V1.Z);
64 // 使用 FMath 相关函数(可能是虚幻引擎自定义的数学函数库)的 Square 函数(用于计算平方),
65 // 分别计算两个向量各对应分量差值的平方,然后求和,得到两个向量距离的平方值
66 }
67
68 FVector ToFVector() const
69// 定义一个成员函数 ToFVector,返回类型为 FVector(虚幻引擎中已有的向量类型),const 修饰表示不改变对象状态,
70 // 功能是将本结构体表示的向量转换为 FVector 类型的向量对象
71 {
72 return FVector(X, Y, Z);
73// 通过使用本结构体的成员变量 X、Y、Z 来创建并返回一个 FVector 类型的向量对象,实现类型转换
74 }
75
76 FString ToString() const
77// 定义一个成员函数 ToString,返回类型为 FString(虚幻引擎中用于表示字符串的类型),const 修饰表明不修改对象,
78 // 其功能是将向量对象转换为一个格式特定的字符串,方便输出显示或者其他需要以字符串形式表示向量的场景
79 {
80 return FString::Printf(TEXT("X=%.2lf Y=%.2lf Z=%.2lf"), X, Y, Z);
81// 使用 FString 的 Printf 函数(类似 C 语言中的 printf,用于格式化字符串生成),按照指定格式(保留两位小数的浮点数形式展示各分量)
82 // 将向量的各分量组合成一个字符串并返回
83 }
84
85 FIntVector ToFIntVector() const
86// 定义一个成员函数 ToFIntVector,返回类型为 FIntVector(虚幻引擎中整型向量类型),const 修饰表示不改变对象状态,
87 // 用于将本结构体表示的向量转换为整型向量对象
88 {
89 return FIntVector((int32)X, (int32)Y, (int32)Z);
90 // 通过将本结构体的双精度浮点数成员变量 X、Y、Z 强制转换为 32 位整型(int32),然后创建并返回一个 FIntVector 类型的整型向量对象,实现类型转换
91 }
92
93 FDVector& operator=(const FDVector& Other)//将对象转换为一个格式的字符串
94 {
95 this->X = Other.X;
96 this->Y = Other.Y;
97 this->Z = Other.Z;
98 return *this;
99 }
100
102// 重载相等运算符(==),返回类型为布尔值(bool),接收一个常量引用类型的 FDVector 参数 Other,
103 // 用于比较两个 FDVector 对象是否相等(即各对应分量是否都相等)
104 {
105 return X == Other.X &&
106 Y == Other.Y &&
107 Z == Other.Z;
108 // 通过分别比较两个对象的各分量是否相等,只有当 X、Y、Z 分量都相等时才返回 true,表示两个向量相等,否则返回 false
109 }
110
112// 重载加法运算符(+),返回类型为 FDVector,接收一个常量引用类型的 FDVector 参数 V,函数被声明为 const,
113 // 表示调用该运算符函数不会修改参与运算的对象状态,其功能是实现两个向量的加法运算,返回相加后的新向量
114 {
115 return FDVector(X + V.X, Y + V.Y, Z + V.Z);
116 // 创建一个新的 FDVector 对象,其各分量分别是当前向量对象与传入的参数向量 V 的对应分量相加的结果,然后返回这个新的向量对象,实现向量加法
117 }
118
119 FDVector& operator+=(float Scalar)
120 {
121 this->X += Scalar;
122 this->Y += Scalar;
123 this->Z += Scalar;
124 return *this;
125 }
126
128 // 重载复合加法赋值运算符(+=),返回类型为 FDVector 的引用,接收一个单精度浮点数(float)参数 Scalar,
129 // 用于实现将当前向量的各分量都加上给定的标量值,并返回修改后的当前向量对象引用,支持类似 a += 5; 这样的连续赋值操作
130 {
131 return FDVector(X - V.X, Y - V.Y, Z - V.Z);
132 }
133
134 FDVector operator-=(const FIntVector& V) const
135 {
136 return FDVector(X - V.X, Y - V.Y, Z - V.Z);
137 }
138
139 FDVector& operator-=(const FIntVector& V)
140 {
141 this->X -= V.X;
142 this->Y -= V.Y;
143 this->Z -= V.Z;
144 return *this;
145// 将当前向量对象的各分量分别加上传入的标量值 Scalar,然后返回当前向量对象的引用
146 }
147
148 FDVector operator/(float Scale) const
149// 重载减法运算符(-),返回类型为 FDVector,接收一个常量引用类型的 FDVector 参数 V,const 修饰表示不修改对象状态,
150 // 用于实现两个向量的减法运算,返回相减后的新向量
151 {
152 const float RScale = 1.f/Scale;
153 return FDVector(X * RScale, Y * RScale, Z * RScale);
154 // 先计算标量的倒数(为了避免直接除以 Scale 可能出现的除以0等问题,先求倒数然后用乘法实现除法运算),
155 // 然后创建一个新的 FDVector 对象,其各分量分别是当前向量对象的对应分量乘以这个倒数的结果,最后返回新向量对象,实现向量除以标量的运算
156 }
157
158 FDVector operator*(float Scale) const
159// 重载乘法运算符(*),返回类型为 FDVector,接收一个单精度浮点数(float)参数 Scale,const 修饰表示不修改对象状态,
160 // 用于实现向量与标量的乘法运算,即把向量的各分量都乘以给定的标量值,返回相乘后的新向量
161 {
162 return FDVector(X * Scale, Y * Scale, Z * Scale);
163// 创建一个新的 FDVector 对象,其各分量分别是当前向量对象的对应分量乘以传入的标量值 Scale 的结果,然后返回这个新向量对象,实现向量与标量的乘法运算
164 }
165
166 FDVector operator*=(float Scale)
167 // 重载复合乘法赋值运算符(*=),返回类型为 FDVector 的引用,接收一个单精度浮点数(float)参数 Scale,
168 // 用于实现将当前向量的各分量都乘以给定的标量值,并返回修改后的当前向量对象引用,支持连续赋值操作
169 {
170 this->X *= Scale;
171 this->Y *= Scale;
172 this->Z *= Scale;
173 return *this;
174// 将当前向量对象的各分量分别乘以传入的标量值 Scale,然后返回当前向量对象的引用
175 }
176
177 FDVector operator*=(double Scale)
178// 重载复合乘法赋值运算符(*=),返回类型为 FDVector 的引用,接收一个双精度浮点数(double)参数 Scale,
179 // 用于实现将当前向量的各分量都乘以给定的双精度浮点数标量值,并返回修改后的当前向量对象引用,支持连续赋值操作
180
181 {
182 this->X *= Scale;
183 this->Y *= Scale;
184 this->Z *= Scale;
185 return *this;
186 // 将当前向量对象的各分量分别乘以传入的双精度浮点数标量值 Scale,然后返回当前向量对象的引用
187 }
188};
bool operator==(const FDVector &Other)
Definition DVector.h:101
double X
Definition DVector.h:13
FIntVector ToFIntVector() const
Definition DVector.h:85
FDVector operator*=(double Scale)
Definition DVector.h:177
FDVector operator+(const FDVector &V) const
Definition DVector.h:111
FDVector & operator+=(float Scalar)
Definition DVector.h:119
FDVector operator-=(const FIntVector &V) const
Definition DVector.h:134
double Z
Definition DVector.h:18
FDVector operator/(float Scale) const
Definition DVector.h:148
FDVector & operator=(const FDVector &Other)
Definition DVector.h:93
FDVector & operator-=(const FIntVector &V)
Definition DVector.h:139
FDVector(const FIntVector &V)
Definition DVector.h:37
FDVector(const FVector &V)
Definition DVector.h:32
double Size() const
Definition DVector.h:42
FDVector()
Definition DVector.h:21
FDVector(double InX, double InY, double InZ)
Definition DVector.h:28
FDVector operator*(float Scale) const
Definition DVector.h:158
FDVector operator*=(float Scale)
Definition DVector.h:166
FDVector(float InX, float InY, float InZ)
Definition DVector.h:24
static double DistSquared(const FDVector &V1, const FDVector &V2)
Definition DVector.h:59
FDVector operator-(const FDVector &V) const
Definition DVector.h:127
FString ToString() const
Definition DVector.h:76
static double Dist(const FDVector &V1, const FDVector &V2)
Definition DVector.h:54
double Y
Definition DVector.h:15
double SizeSquared() const
Definition DVector.h:49
FVector ToFVector() const
Definition DVector.h:68