📜  如何在 C++ 中制作二维向量(1)

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

在 C++ 中制作二维向量

在 C++ 中,我们经常需要使用向量来表示二维坐标、速度、加速度等物理量。本文将介绍如何在 C++ 中制作二维向量,并提供代码实现。

二维向量的定义

二维向量可以用一个有序数对 $(x, y)$ 来表示,其中 $x$ 表示向量在 $x$ 轴上的分量,$y$ 表示向量在 $y$ 轴上的分量。常见的二维向量操作包括向量加、减,点积、叉积等。

二维向量的实现

我们可以使用 C++ 中的结构体来表示二维向量。下面是一个简单的二维向量结构体的定义:

struct Vector2 {
    float x, y;
};

上述代码中,我们定义了一个名为 Vector2 的结构体,该结构体包含了两个浮点数类型的变量 xy,分别表示向量在 $x$ 轴和 $y$ 轴方向上的分量。

接下来,我们可以定义各种二维向量操作的函数,比如向量加、向量减、点积、叉积等,可以定义为结构体的成员函数或全局函数。

向量加

向量加可以表示为:

$$ \vec{v}1 + \vec{v}2 = \begin{pmatrix} v{1x} + v{2x} \ v_{1y} + v_{2y} \ \end{pmatrix} $$

我们可以将向量加的操作定义为结构体的成员函数:

struct Vector2 {
    float x, y;
    
    Vector2 operator+(const Vector2& other) const {
        return Vector2{x + other.x, y + other.y};
    }
};

上述代码中,我们定义了一个名为 operator+ 的成员函数,用来对两个向量进行相加运算。该函数返回一个新的向量对象,该向量的 $x$ 分量为当前向量的 $x$ 分量和另一个向量的 $x$ 分量之和,$y$ 分量为当前向量的 $y$ 分量和另一个向量的 $y$ 分量之和。

向量减

向量减可以表示为:

$$ \vec{v}1 - \vec{v}2 = \begin{pmatrix} v{1x} - v{2x} \ v_{1y} - v_{2y} \ \end{pmatrix} $$

我们可以将向量减的操作定义为结构体的成员函数:

struct Vector2 {
    float x, y;
    
    Vector2 operator-(const Vector2& other) const {
        return Vector2{x - other.x, y - other.y};
    }
};

上述代码中,我们定义了一个名为 operator- 的成员函数,用来对两个向量进行相减运算。该函数返回一个新的向量对象,该向量的 $x$ 分量为当前向量的 $x$ 分量减去另一个向量的 $x$ 分量,$y$ 分量为当前向量的 $y$ 分量减去另一个向量的 $y$ 分量。

向量点积

向量的点积可以表示为:

$$ \vec{v}1 \cdot \vec{v}2 = v{1x} \times v{2x} + v_{1y} \times v_{2y} $$

我们可以将向量点积的操作定义为结构体的成员函数:

struct Vector2 {
    float x, y;
    
    float dot(const Vector2& other) const {
        return x * other.x + y * other.y;
    }
};

上述代码中,我们定义了一个名为 dot 的成员函数,用来对两个向量进行点积运算。该函数返回一个浮点数,表示两个向量的点积。

向量叉积

向量的叉积可以表示为:

$$ \vec{v}1 \times \vec{v}2 = v{1x} \times v{2y} - v_{1y} \times v_{2x} $$

我们可以将向量叉积的操作定义为全局函数:

float cross(const Vector2& v1, const Vector2& v2) {
    return v1.x * v2.y - v1.y * v2.x;
}

上述代码中,我们定义了一个名为 cross 的全局函数,用来对两个向量进行叉积运算。该函数返回一个浮点数,表示两个向量的叉积。

总结

本文介绍了在 C++ 中制作二维向量的方法,我们使用了结构体来表示二维向量,并定义了向量加、向量减、向量点积、向量叉积等操作。读者可以根据自己的需求来扩展该结构体,实现更多二维向量操作。