📅  最后修改于: 2023-12-03 15:08:34.928000             🧑  作者: Mango
在 C++ 中,我们经常需要使用向量来表示二维坐标、速度、加速度等物理量。本文将介绍如何在 C++ 中制作二维向量,并提供代码实现。
二维向量可以用一个有序数对 $(x, y)$ 来表示,其中 $x$ 表示向量在 $x$ 轴上的分量,$y$ 表示向量在 $y$ 轴上的分量。常见的二维向量操作包括向量加、减,点积、叉积等。
我们可以使用 C++ 中的结构体来表示二维向量。下面是一个简单的二维向量结构体的定义:
struct Vector2 {
float x, y;
};
上述代码中,我们定义了一个名为 Vector2
的结构体,该结构体包含了两个浮点数类型的变量 x
和 y
,分别表示向量在 $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++ 中制作二维向量的方法,我们使用了结构体来表示二维向量,并定义了向量加、向量减、向量点积、向量叉积等操作。读者可以根据自己的需求来扩展该结构体,实现更多二维向量操作。