三次元ベクター
車輪の再開発だけど,勉強かねてかいてみた。
#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); } };