📅  最后修改于: 2023-12-03 15:14:16.378000             🧑  作者: Mango
在游戏开发中,常常需要对二维向量进行计算。C++中的vector2类可以方便地表示和计算二维向量。
#include <cmath>
#include <vector>
class vector2
{
public:
float x, y; // 二维向量坐标
vector2(); // 默认构造函数,初始化 (0, 0)
vector2(float X, float Y); // 构造函数,初始化 (X, Y)
// 向量的加、减、乘、除运算
vector2 operator+(const vector2 &v) const;
vector2 operator-(const vector2 &v) const;
vector2 operator*(float s) const;
vector2 operator/(float s) const;
// 向量的赋值运算
vector2& operator+=(const vector2 &v);
vector2& operator-=(const vector2 &v);
vector2& operator*=(float s);
vector2& operator/=(float s);
// 向量的比较运算
bool operator==(const vector2 &v) const;
bool operator!=(const vector2 &v) const;
// 向量的长度
float length() const;
// 向量的归一化
vector2 normalize() const;
// 向量的点积
float dot(const vector2 &v) const;
// 向量的叉积
float cross(const vector2 &v) const;
// 向量的旋转
vector2 rotate(float degree) const;
};
默认构造函数初始化为 (0, 0)。构造函数可以指定 x 和 y 的初值。
vector2::vector2()
{
x = y = 0.0f;
}
vector2::vector2(float X, float Y)
{
x = X;
y = Y;
}
向量相加,向量相减,向量与标量相乘,向量与标量相除的结果仍为向量。
vector2 vector2::operator+(const vector2 &v) const
{
return vector2(x + v.x, y + v.y);
}
vector2 vector2::operator-(const vector2 &v) const
{
return vector2(x - v.x, y - v.y);
}
vector2 vector2::operator*(float s) const
{
return vector2(x * s, y * s);
}
vector2 vector2::operator/(float s) const
{
return vector2(x / s, y / s);
}
向量相加,向量相减,向量与标量相乘,向量与标量相除的结果仍为向量。
vector2& vector2::operator+=(const vector2 &v)
{
x += v.x;
y += v.y;
return *this;
}
vector2& vector2::operator-=(const vector2 &v)
{
x -= v.x;
y -= v.y;
return *this;
}
vector2& vector2::operator*=(float s)
{
x *= s;
y *= s;
return *this;
}
vector2& vector2::operator/=(float s)
{
x /= s;
y /= s;
return *this;
}
两个向量相等当且仅当它们的 x 和 y 坐标都相等。
bool vector2::operator==(const vector2 &v) const
{
return x == v.x && y == v.y;
}
bool vector2::operator!=(const vector2 &v) const
{
return !(*this == v);
}
求向量长度使用勾股定理。
float vector2::length() const
{
return std::sqrt(x * x + y * y);
}
将向量每个坐标都除以向量长度。
vector2 vector2::normalize() const
{
float len = length();
if (len != 0.0f)
{
return *this / len;
}
return vector2();
}
两个向量的点积,即相乘后相加。
float vector2::dot(const vector2 &v) const
{
return x * v.x + y * v.y;
}
两个向量的叉积,即向量的长度为两个向量构成的平行四边形的面积。
float vector2::cross(const vector2 &v) const
{
return x * v.y - y * v.x;
}
将向量绕原点逆时针旋转一定角度后的新向量。
vector2 vector2::rotate(float degree) const
{
float rad = degree * 3.14159265358979323 / 180.0f;
float c = std::cos(rad);
float s = std::sin(rad);
return vector2(x * c - y * s, x * s + y * c);
}
以上就是C++中vector2类的基本介绍。使用vector2类可以方便地进行二维向量运算,有助于开发出更为精细的游戏效果。