nuclear@23: #include nuclear@23: nuclear@23: inline float Vector3::length() nuclear@23: { nuclear@23: return sqrt(x * x + y * y + z * z); nuclear@23: } nuclear@23: nuclear@23: inline float Vector3::lengthsq() nuclear@23: { nuclear@23: return x * x + y * y + z * z; nuclear@23: } nuclear@23: nuclear@23: inline Vector3 operator +(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); nuclear@23: } nuclear@23: nuclear@23: inline Vector3 operator -(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); nuclear@23: } nuclear@23: nuclear@23: inline Vector3 operator *(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return Vector3(a.x * b.x, a.y * b.y, a.z * b.z); nuclear@23: } nuclear@23: nuclear@23: inline Vector3 operator /(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return Vector3(a.x / b.x, a.y / b.y, a.z / b.z); nuclear@23: } nuclear@23: nuclear@23: nuclear@23: inline Vector3 operator -(const Vector3 &vec) nuclear@23: { nuclear@23: return Vector3(-vec.x, -vec.y, -vec.z); nuclear@23: } nuclear@23: nuclear@23: inline Vector3 operator *(const Vector3 &vec, float s) nuclear@23: { nuclear@23: return Vector3(vec.x * s, vec.y * s, vec.z * s); nuclear@23: } nuclear@23: nuclear@54: inline Vector3 operator /(const Vector3 &vec, float s) nuclear@54: { nuclear@54: return Vector3(vec.x / s, vec.y / s, vec.z / s); nuclear@54: } nuclear@23: nuclear@23: inline float dot(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return a.x * b.x + a.y * b.y + a.z * b.z; nuclear@23: } nuclear@23: nuclear@23: inline Vector3 cross(const Vector3 &a, const Vector3 &b) nuclear@23: { nuclear@23: return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x); nuclear@23: } nuclear@54: nuclear@54: inline Vector3 reflect(const Vector3 &v, const Vector3 &n) nuclear@54: { nuclear@54: return n * (2.0 * dot(v, n)) - v; nuclear@54: }