diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/Vector.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/util/Vector.cpp | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/util/Vector.cpp b/Source/ThirdParty/ANGLE/util/Vector.cpp new file mode 100644 index 000000000..4a2101a20 --- /dev/null +++ b/Source/ThirdParty/ANGLE/util/Vector.cpp @@ -0,0 +1,180 @@ +// +// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Vector: +// Vector class for linear math. +// + +#include "Vector.h" + +#include <math.h> + +Vector2::Vector2() : x(0.0), y(0.0) +{ +} + +Vector2::Vector2(float x, float y) : x(x), y(y) +{ +} + +bool Vector2::operator==(const Vector2 &vec) const +{ + return x == vec.x && y == vec.y; +} + +bool Vector2::operator!=(const Vector2 &vec) const +{ + return !(*this == vec); +} + +std::ostream &operator<<(std::ostream &stream, const Vector2 &vec) +{ + stream << "(" << vec.x << "," << vec.y << ")"; + return stream; +} + +float Vector2::length(const Vector2 &vec) +{ + float lenSquared = lengthSquared(vec); + return (lenSquared != 0.0f) ? sqrtf(lenSquared) : 0.0f; +} + +float Vector2::lengthSquared(const Vector2 &vec) +{ + return vec.x * vec.x + vec.y * vec.y; +} + +Vector2 Vector2::normalize(const Vector2 &vec) +{ + Vector2 ret(0.0f, 0.0f); + float len = length(vec); + if (len != 0.0f) + { + float invLen = 1.0f / len; + ret.x = vec.x * invLen; + ret.y = vec.y * invLen; + } + return ret; +} + +Vector3::Vector3() : x(0.0), y(0.0), z(0.0) +{ +} + +Vector3::Vector3(float x, float y, float z) : x(x), y(y), z(z) +{ +} + +float Vector3::length(const Vector3 &vec) +{ + float lenSquared = lengthSquared(vec); + return (lenSquared != 0.0f) ? sqrtf(lenSquared) : 0.0f; +} + +float Vector3::lengthSquared(const Vector3 &vec) +{ + return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z; +} + +Vector3 Vector3::normalize(const Vector3 &vec) +{ + Vector3 ret(0.0f, 0.0f, 0.0f); + float len = length(vec); + if (len != 0.0f) + { + float invLen = 1.0f / len; + ret.x = vec.x * invLen; + ret.y = vec.y * invLen; + ret.z = vec.z * invLen; + } + return ret; +} + +float Vector3::dot(const Vector3 &a, const Vector3 &b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +Vector3 Vector3::cross(const Vector3 &a, const Vector3 &b) +{ + 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); +} + +Vector3 operator*(const Vector3 &a, const Vector3 &b) +{ + return Vector3(a.x * b.x, a.y * b.y, a.z * b.z); +} + +Vector3 operator*(const Vector3 &a, const float &b) +{ + return Vector3(a.x * b, a.y * b, a.z * b); +} + +Vector3 operator/(const Vector3 &a, const Vector3 &b) +{ + return Vector3(a.x / b.x, a.y / b.y, a.z / b.z); +} + +Vector3 operator/(const Vector3 &a, const float &b) +{ + return Vector3(a.x / b, a.y / b, a.z / b); +} + +Vector3 operator+(const Vector3 &a, const Vector3 &b) +{ + return Vector3(a.x + b.x, a.y + b.y, a.z + b.z); +} + +Vector3 operator-(const Vector3 &a, const Vector3 &b) +{ + return Vector3(a.x - b.x, a.y - b.y, a.z - b.z); +} + +bool operator==(const Vector3 &a, const Vector3 &b) +{ + return (a.x == b.x && a.y == b.y && a.z == b.z); +} + +bool operator!=(const Vector3 &a, const Vector3 &b) +{ + return !(a == b); +} + +Vector4::Vector4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) +{ +} + +Vector4::Vector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) +{ +} + +float Vector4::length(const Vector4 &vec) +{ + float lenSquared = lengthSquared(vec); + return (lenSquared != 0.0f) ? sqrtf(lenSquared) : 0.0f; +} + +float Vector4::lengthSquared(const Vector4 &vec) +{ + return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z + vec.w * vec.w; +} + +Vector4 Vector4::normalize(const Vector4 &vec) +{ + Vector4 ret(0.0f, 0.0f, 0.0f, 1.0f); + if (vec.w != 0.0f) + { + float invLen = 1.0f / vec.w; + ret.x = vec.x * invLen; + ret.y = vec.y * invLen; + ret.z = vec.z * invLen; + } + return ret; +} + +float Vector4::dot(const Vector4 &a, const Vector4 &b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; +} |