FDVector 头文件文档

该文档详细介绍 FDVector 头文件中所有变量、构造函数、方法以及操作符重载。该结构在 Carla Simulator 项目中主要用于高效执行向量运算及类型转换,避免直接使用 Unreal Engine 的向量类型带来的性能损耗。

目录结构

概述

FDVector 是一个轻量级的三维向量结构,提供了向量的基本数学运算、类型转换以及便于调试的字符串输出功能。

构造函数

  • FDVector()
    默认构造函数,将 XYZ 均初始化为 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)
- operator== 比较两个 FDVector 是否相等(各分量相等)。 示例:
FDVector a(1.0, 2.0, 3.0);
FDVector b(1.0, 2.0, 3.0);
bool equal = (a == b);  // equal 为 true
- operator+ 实现向量加法,返回两个向量分量相加的结果。 示例:
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)
- operator+=(float Scalar) 将标量 Scalar 累加到每个分量上。 示例:
FDVector a(1.0, 2.0, 3.0);
a += 2.0f;
// a 的值变为 (3.0, 4.0, 5.0)
- operator- 实现向量减法,返回两个向量分量相减的结果。 示例:
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)
- operator-=(const FIntVector& V) 提供两种重载:

  1. 返回新的向量而不修改原向量。 示例:
    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 保持不变
    
  2. 修改当前向量,直接更新自身。 示例:
    FDVector a(5.0, 7.0, 9.0);
    FIntVector intVec(1, 2, 3);
    a -= intVec;
    // a 的值更新为 (4.0, 5.0, 6.0)
    
  3. operator/ 实现向量除以标量,返回每个分量均除以 Scale 后的结果。 示例:
    FDVector a(4.0, 8.0, 12.0);
    FDVector b = a / 2.0f;  
    // b 的值为 (2.0, 4.0, 6.0)
    
  4. operator 实现向量乘以标量,返回每个分量均乘以 Scale 后的结果。 示例:
    FDVector a(1.0, 2.0, 3.0);
    FDVector b = a * 3.0f;  
    // b 的值为 (3.0, 6.0, 9.0)
    
  5. operator=(float Scale) 将当前向量的每个分量乘以标量 Scale 并更新自身。 示例:
    FDVector a(2.0, 3.0, 4.0);
    a *= 2.0f;
    // a 的值更新为 (4.0, 6.0, 8.0)
    
  6. 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 的 FVectorFIntVector 类型之间的互转,保持各模块间数据传递的一致性和高效性。