📜  2d 向量 c++ 声明 - C++ (1)

📅  最后修改于: 2023-12-03 15:29:11.160000             🧑  作者: Mango

2D向量C++声明

2D向量是在平面上表示大小和方向的数学概念。在计算机图形学中,2D向量常用于表示游戏对象的位置,速度和加速度等物理属性。在这篇文章中,我们将介绍如何在C++中声明和使用2D向量。

定义2D向量类

在C++中,我们可以使用结构体或者类来定义2D向量。在本篇文章中,我们将使用类来定义2D向量。

class Vector2D 
{
public:
    float x, y;
    Vector2D(float x = 0, float y = 0) : x(x), y(y) {}
};

在上面的示例代码中,我们定义了一个名为 Vector2D 的类,它有两个公共成员变量 x 和 y,表示向量在x轴和y轴上的分量。我们使用一个构造函数来初始化向量的x和y值。

向量运算

在游戏编程中,我们经常需要对向量进行一些基本的数学运算,如加减乘除、点积和叉积等。下面是常见的一些向量运算的示例代码:

向量加法
Vector2D operator+(const Vector2D& v1, const Vector2D& v2)
{
    return Vector2D(v1.x + v2.x, v1.y + v2.y);
}

在上面的示例代码中,我们重载了运算符+,使得它可以用于向量的加法运算。我们使用引用传递两个向量,返回值是一个新的向量。

向量减法
Vector2D operator-(const Vector2D& v1, const Vector2D& v2)
{
    return Vector2D(v1.x - v2.x, v1.y - v2.y);
}

在上面的示例代码中,我们重载了运算符-,使得它可以用于向量的减法运算。我们使用引用传递两个向量,返回值是一个新的向量。

向量数乘
Vector2D operator*(const Vector2D& v, float scalar)
{
    return Vector2D(v.x * scalar, v.y * scalar);
}

Vector2D operator*(float scalar, const Vector2D& v)
{
    return Vector2D(v.x * scalar, v.y * scalar);
}

在上面的示例代码中,我们重载了运算符*,使得它可以用于向量的数乘运算。我们可以通过一个浮点数和一个向量相乘,或者通过一个向量和一个浮点数相乘。

向量点积
float dotProduct(const Vector2D& v1, const Vector2D& v2)
{
    return v1.x * v2.x + v1.y * v2.y;
}

在上面的示例代码中,我们定义了一个名为dotProduct的函数,用于计算两个向量的点积。点积的计算公式为:a·b = |a|·|b|·cosθ。其中,|a|和|b|分别表示向量a和向量b的模, θ表示两个向量之间的夹角。如果两个向量是正交的,则它们的点积为0。

向量叉积
float crossProduct(const Vector2D& v1, const Vector2D& v2)
{
    return v1.x * v2.y - v1.y * v2.x;
}

在上面的示例代码中,我们定义了一个名为crossProduct的函数,用于计算两个向量的叉积。叉积的计算公式为:a×b = |a|·|b|·sinθ。其中,|a|和|b|分别表示向量a和向量b的模, θ表示两个向量之间的夹角。叉积的结果是一个新的向量,它垂直于两个向量所在的平面。

结论

在本篇文章中,我们介绍了如何在C++中声明和使用2D向量,以及如何进行向量的加减乘除、点积和叉积等基本数学运算。这些向量运算是游戏编程中经常使用的基本工具,可以帮助我们实现许多有趣的游戏效果。