📜  cpp vector2 - C++ (1)

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

C++中的二维向量——vector2

在游戏开发中,常常需要对二维向量进行计算。C++中的vector2类可以方便地表示和计算二维向量。

包含头文件
#include <cmath>
#include <vector>
定义vector2类
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类可以方便地进行二维向量运算,有助于开发出更为精细的游戏效果。