nuclear@0: float Vector3::DotProduct(const Vector3 &vec) const { nuclear@0: return x * vec.x + y * vec.y + z * vec.z; nuclear@0: } nuclear@0: nuclear@0: float DotProduct(const Vector3 &vec1, const Vector3 &vec2) { nuclear@0: return vec1.x * vec2.x + vec1.y * vec2.y + vec1.z * vec2.z; nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::CrossProduct(const Vector3 &vec) const { nuclear@0: return Vector3(y * vec.z - z * vec.y, z * vec.x - x * vec.z, x * vec.y - y * vec.x); nuclear@0: } nuclear@0: nuclear@0: Vector3 CrossProduct(const Vector3 &vec1, const Vector3 &vec2) { nuclear@0: return Vector3(vec1.y * vec2.z - vec1.z * vec2.y, vec1.z * vec2.x - vec1.x * vec2.z, vec1.x * vec2.y - vec1.y * vec2.x); nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::operator +(const Vector3 &vec) const { nuclear@0: return Vector3(x + vec.x, y + vec.y, z + vec.z); nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::operator -(const Vector3 &vec) const { nuclear@0: return Vector3(x - vec.x, y - vec.y, z - vec.z); nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::operator *(float scalar) const { nuclear@0: return Vector3(x * scalar, y * scalar, z * scalar); nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::operator /(float scalar) const { nuclear@0: return Vector3(x / scalar, y / scalar, z / scalar); nuclear@0: } nuclear@0: nuclear@0: void Vector3::operator +=(const Vector3 &vec) { nuclear@0: x += vec.x; nuclear@0: y += vec.y; nuclear@0: z += vec.z; nuclear@0: } nuclear@0: nuclear@0: void Vector3::operator -=(const Vector3 &vec) { nuclear@0: x -= vec.x; nuclear@0: y -= vec.y; nuclear@0: z -= vec.z; nuclear@0: } nuclear@0: nuclear@0: void Vector3::operator *=(float scalar) { nuclear@0: x *= scalar; nuclear@0: y *= scalar; nuclear@0: z *= scalar; nuclear@0: } nuclear@0: nuclear@0: void Vector3::operator /=(float scalar) { nuclear@0: x /= scalar; nuclear@0: y /= scalar; nuclear@0: z /= scalar; nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::operator -() const { nuclear@0: return Vector3(-x, -y, -z); nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator >(const Vector3 &vec) const { nuclear@0: return LengthSq() > vec.LengthSq(); nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator <(const Vector3 &vec) const { nuclear@0: return LengthSq() < vec.LengthSq(); nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator >(float len) const { nuclear@0: return LengthSq() > len; nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator <(float len) const { nuclear@0: return LengthSq() < len; nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator ==(const Vector3 &vec) const { nuclear@0: return ((*this - vec).Length() < XSmallNumber); nuclear@0: } nuclear@0: nuclear@0: bool Vector3::operator ==(float len) const { nuclear@0: return ((this->Length() - len) < XSmallNumber); nuclear@0: } nuclear@0: nuclear@0: Vector3::operator Vector2() const { nuclear@0: return Vector2(x, y); nuclear@0: } nuclear@0: nuclear@0: Vector3::operator Vector4() const { nuclear@0: return Vector4(x, y, z, 1.0f); nuclear@0: } nuclear@0: nuclear@0: nuclear@0: float Vector3::Length() const { nuclear@0: return (float)sqrt(x*x + y*y + z*z); nuclear@0: } nuclear@0: nuclear@0: float Vector3::LengthSq() const { nuclear@0: return x*x + y*y + z*z; nuclear@0: } nuclear@0: nuclear@0: void Vector3::Normalize() { nuclear@0: float len = (float)sqrt(x*x + y*y + z*z); nuclear@0: x /= len; nuclear@0: y /= len; nuclear@0: z /= len; nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::Normalized() const { nuclear@0: float len = (float)sqrt(x*x + y*y + z*z); nuclear@0: return Vector3(x / len, y / len, z / len); nuclear@0: } nuclear@0: nuclear@0: Vector3 Vector3::Reflection(const Vector3 &normal) const { nuclear@0: return normal * this->DotProduct(normal) * 2.0f - *this; nuclear@0: }