FDVector 头文件文档
该文档详细介绍 FDVector 头文件中所有变量、构造函数、方法以及操作符重载。该结构在 Carla Simulator 项目中主要用于高效执行向量运算及类型转换,避免直接使用 Unreal Engine 的向量类型带来的性能损耗。
目录结构
概述
FDVector 是一个轻量级的三维向量结构,提供了向量的基本数学运算、类型转换以及便于调试的字符串输出功能。
构造函数
- FDVector()
默认构造函数,将 X、Y、Z 均初始化为 0.0.
示例:
FDVector vec1; // vec1.X = 0.0, vec1.Y = 0.0, vec1.Z = 0.0
- FDVector(float InX, float InY, float InZ)
使用单精度浮点数初始化向量。
示例:
FDVector vec2(1.0f, 2.0f, 3.0f); // vec2.X = 1.0, vec2.Y = 2.0, vec2.Z = 3.0
- FDVector(double InX, double InY, double InZ)
使用双精度浮点数初始化向量。
示例:
FDVector vec3(1.0, 2.0, 3.0); // vec3.X = 1.0, vec3.Y = 2.0, vec3.Z = 3.0
- FDVector(const FVector& V)
从 Unreal Engine 的 FVector 类型构造 FDVector。
示例:
FIntVector intVec(7, 8, 9); FDVector vec5(intVec); // vec5.X = 7.0, vec5.Y = 8.0, vec5.Z = 9.0
成员变量
- X:表示向量在 X 轴的坐标。
- Y:表示向量在 Y 轴的坐标。
- Z:表示向量在 Z 轴的坐标。
示例:
FDVector vec;
vec.X = 10.0;
vec.Y = 20.0;
vec.Z = 30.0;
主要方法
- Size()
返回向量的长度(欧几里得范数)。
示例:
计算公式如下:
FDVector vec(3.0, 4.0, 0.0); double length = vec.Size(); // length = 5.0
- SizeSquared()
返回向量长度的平方,避免了计算平方根的开销。
示例:
FDVector vec(3.0, 4.0, 0.0); double lengthSq = vec.SizeSquared(); // lengthSq = 25.0
- Dist(const FDVector &V1, const FDVector &V2)
静态方法,计算两个向量之间的距离。
示例:
计算公式如下:
FDVector a(1.0, 2.0, 3.0); FDVector b(4.0, 6.0, 3.0); double distance = FDVector::Dist(a, b); // distance = 5.0
- DistSquared(const FDVector &V1, const FDVector &V2)
静态方法,计算两个向量之间距离的平方。
示例:
FDVector a(1.0, 2.0, 3.0); FDVector b(4.0, 6.0, 3.0); double distanceSq = FDVector::DistSquared(a, b); // distanceSq = 25.0
- ToFVector()
将 FDVector 转换为 Unreal Engine 的 FVector 类型。
示例:
FDVector vec(1.0, 2.0, 3.0); FVector ueVec = vec.ToFVector(); // ueVec 与 vec 数值一致
- ToString()
将向量格式化为字符串,输出格式为 "X=xx.xx Y=yy.yy Z=zz.zz",方便调试。
示例:
FDVector vec(1.2345, 2.3456, 3.4567); FString str = vec.ToString(); // str 为 "X=1.23 Y=2.35 Z=3.46"
- ToFIntVector()
将 FDVector 转换为 Unreal Engine 的 FIntVector 类型,采用强制类型转换。
示例:
FDVector vec(1.9, 2.9, 3.9); FIntVector intVec = vec.ToFIntVector(); // intVec.X = 1, intVec.Y = 2, intVec.Z = 3
操作符重载
为了支持直观的向量运算,FDVector 重载了以下操作符: - operator= 赋值操作符,将另一个 FDVector 的值复制给当前对象。 示例:
FDVector a(1.0, 2.0, 3.0);
FDVector b;
b = a; // b 的值变为 (1.0, 2.0, 3.0)
FDVector a(1.0, 2.0, 3.0);
FDVector b(1.0, 2.0, 3.0);
bool equal = (a == b); // equal 为 true
FDVector a(1.0, 2.0, 3.0);
FDVector b(4.0, 5.0, 6.0);
FDVector c = a + b; // c 的值为 (5.0, 7.0, 9.0)
FDVector a(1.0, 2.0, 3.0);
a += 2.0f;
// a 的值变为 (3.0, 4.0, 5.0)
FDVector a(5.0, 7.0, 9.0);
FDVector b(1.0, 2.0, 3.0);
FDVector c = a - b; // c 的值为 (4.0, 5.0, 6.0)
- 返回新的向量而不修改原向量。
示例:
FDVector a(5.0, 7.0, 9.0); FIntVector intVec(1, 2, 3); FDVector b = a -= intVec; // b 的值为 (4.0, 5.0, 6.0),a 保持不变
- 修改当前向量,直接更新自身。
示例:
FDVector a(5.0, 7.0, 9.0); FIntVector intVec(1, 2, 3); a -= intVec; // a 的值更新为 (4.0, 5.0, 6.0)
- operator/
实现向量除以标量,返回每个分量均除以 Scale 后的结果。
示例:
FDVector a(4.0, 8.0, 12.0); FDVector b = a / 2.0f; // b 的值为 (2.0, 4.0, 6.0)
- operator
实现向量乘以标量,返回每个分量均乘以 Scale 后的结果。
示例:
FDVector a(1.0, 2.0, 3.0); FDVector b = a * 3.0f; // b 的值为 (3.0, 6.0, 9.0)
- operator=(float Scale)
将当前向量的每个分量乘以标量 Scale 并更新自身。
示例:
FDVector a(2.0, 3.0, 4.0); a *= 2.0f; // a 的值更新为 (4.0, 6.0, 8.0)
- operator=(double Scale)
同样功能,支持双精度标量。
示例:
FDVector a(2.0, 3.0, 4.0); a *= 2.0; // a 的值更新为 (4.0, 6.0, 8.0)
在 Carla 项目中的应用
在 Carla Simulator 项目中,FDVector 的主要应用包括:
- 高效计算:用于执行频繁的向量运算(如位置计算、距离判定、碰撞检测等),减少直接使用 Unreal Engine 内置向量类可能带来的性能损耗。
- 类型转换:便于与 Unreal Engine 的 FVector 和 FIntVector 类型之间的互转,保持各模块间数据传递的一致性和高效性。