三次元ベクター

車輪の再開発だけど,勉強かねてかいてみた。

#include <math.h>

class Vector3 {
public:
    float x, y, z;

    Vector3() {
        x = 0.0f;
        y = 0.0f;
        z = 0.0f;
    }
    
    Vector3(float x_, float y_, float z_) {
        x = x_;
        y = y_;
        z = z_;
    }
    
    virtual ~Vector3() {}

    void set(float x_, float y_, float z_) {
        x = x_;
        y = y_;
        z = z_;
    }

    Vector3 operator+(Vector3 &v) {
        return Vector3(x + v.x, y + v.y, z + v.z);
    }

    Vector3& operator+=(Vector3 &v) {
        x += v.x;
        y += v.y;
        z += v.z;
        return *this;
    }

    Vector3 operator-(Vector3 &v) {
        return Vector3(x - v.x, y - v.y, z - v.z);
    }
    
    Vector3& operator-=(Vector3 &v) {
        x -= v.x;
        y -= v.y;
        z -= v.z;
        return *this;
    }
    
    Vector3 operator*(float v) {
        return Vector3(x * v, y * v, z * v);
    }
    
    Vector3& operator*=(float v) {
        x *= v;
        y *= v;
        z *= v;
        return *this;
    }
    
    Vector3 operator/(float v) {
        return Vector3(x / v, y / v, z / v);
    }
    
    Vector3& operator/=(float v) {
        x /= v;
        y /= v;
        z /= v;
        return *this;
    }

    float lengthSq() {
        return x * x + y * y + z * z;
    }
    
    float length() {
        return sqrt(lengthSq());
    }
    
    Vector3 cross(Vector3 &v) {
        float rx = y * v.z - z * v.y;
        float ry = z * v.x - x * v.z;
        float rz = x * v.y - y * v.x;
        return Vector3(rx, ry, rz);
    }
    
    float dot(Vector3 &v) {
        return x * v.x + y * v.y + z * v.z;
    }
    
    Vector3 normalize() {
        float v = length();
        return Vector3(x / v, y / v, z / v);
    }
};