📜  使用类在C++中实现矢量数量(1)

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

使用类在C++中实现矢量数量

简介

矢量(vector)在数学和物理中都是一种非常基本的概念,它是指一个带有方向和大小的量。在计算机编程中,矢量同样也是一个非常常见的概念,尤其在3D游戏开发中经常会用到。本文将介绍如何使用类在C++中实现矢量(vector)的运算。

实现

我们首先需要定义一个矢量类(Vector)并在其中包含矢量的各种运算,如加、减、乘、除等。下面是一个基本的矢量类的定义:

class Vector {
public:
    float x;
    float y;
    float z;

    Vector(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}

    Vector operator+(const Vector& other) const {
        return Vector(x + other.x, y + other.y, z + other.z);
    }

    Vector operator-(const Vector& other) const {
        return Vector(x - other.x, y - other.y, z - other.z);
    }

    Vector operator*(float scalar) const {
        return Vector(x * scalar, y * scalar, z * scalar);
    }

    Vector operator/(float scalar) const {
        return Vector(x / scalar, y / scalar, z / scalar);
    }

    float dot(const Vector& other) const {
        return x * other.x + y * other.y + z * other.z;
    }

    Vector cross(const Vector& other) const {
        return Vector(y * other.z - z * other.y, z * other.x - x * other.z, x * other.y - y * other.x);
    }

    float length() const {
        return std::sqrt(x * x + y * y + z * z);
    }

    Vector normalized() const {
        float len = length();
        if (len != 0) {
            return Vector(x / len, y / len, z / len);
        } else {
            return Vector(0, 0, 0);
        }
    }
};

矢量类包含三个成员变量x、y、z,分别表示矢量在三个坐标轴上的分量。构造函数用于初始化矢量的值。矢量的各种运算使用了运算符重载。注意,由于运算符重载返回的是一个新的矢量,所以需要使用const关键字来保证运算符重载函数不会修改本身的值。

使用

有了矢量类,我们就可以方便地进行各种矢量运算了。下面给出一些示例:

Vector a(1, 2, 3);
Vector b(4, 5, 6);

Vector c = a + b; // c的值为(5, 7, 9)
Vector d = a - b; // d的值为(-3, -3, -3)
Vector e = a * 2; // e的值为(2, 4, 6)
Vector f = b / 2; // f的值为(2, 2.5, 3)

float dotProduct = a.dot(b); // dotProduct的值为(1*4 + 2*5 + 3*6) = 32

Vector crossProduct = a.cross(b); // crossProduct的值为(-3, 6, -3)

float length = a.length(); // length的值为sqrt(1*1 + 2*2 + 3*3) = sqrt(14)

Vector normalized = a.normalized(); // normalized的值为(1/sqrt(14), 2/sqrt(14), 3/sqrt(14))
总结

使用类在C++中实现矢量(vector)的运算,可以方便地进行各种矢量运算,尤其在3D游戏开发中非常有用。在实现矢量类时需要注意使用const关键字来保证运算符重载函数不会修改本身的值。