absence_thelab
diff src/common/n3dmath.inl @ 0:1cffe3409164
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 23 Oct 2014 01:46:07 +0300 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/common/n3dmath.inl Thu Oct 23 01:46:07 2014 +0300 1.3 @@ -0,0 +1,116 @@ 1.4 +float Vector3::DotProduct(const Vector3 &vec) const { 1.5 + return x * vec.x + y * vec.y + z * vec.z; 1.6 +} 1.7 + 1.8 +float DotProduct(const Vector3 &vec1, const Vector3 &vec2) { 1.9 + return vec1.x * vec2.x + vec1.y * vec2.y + vec1.z * vec2.z; 1.10 +} 1.11 + 1.12 +Vector3 Vector3::CrossProduct(const Vector3 &vec) const { 1.13 + return Vector3(y * vec.z - z * vec.y, z * vec.x - x * vec.z, x * vec.y - y * vec.x); 1.14 +} 1.15 + 1.16 +Vector3 CrossProduct(const Vector3 &vec1, const Vector3 &vec2) { 1.17 + 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); 1.18 +} 1.19 + 1.20 +Vector3 Vector3::operator +(const Vector3 &vec) const { 1.21 + return Vector3(x + vec.x, y + vec.y, z + vec.z); 1.22 +} 1.23 + 1.24 +Vector3 Vector3::operator -(const Vector3 &vec) const { 1.25 + return Vector3(x - vec.x, y - vec.y, z - vec.z); 1.26 +} 1.27 + 1.28 +Vector3 Vector3::operator *(float scalar) const { 1.29 + return Vector3(x * scalar, y * scalar, z * scalar); 1.30 +} 1.31 + 1.32 +Vector3 Vector3::operator /(float scalar) const { 1.33 + return Vector3(x / scalar, y / scalar, z / scalar); 1.34 +} 1.35 + 1.36 +void Vector3::operator +=(const Vector3 &vec) { 1.37 + x += vec.x; 1.38 + y += vec.y; 1.39 + z += vec.z; 1.40 +} 1.41 + 1.42 +void Vector3::operator -=(const Vector3 &vec) { 1.43 + x -= vec.x; 1.44 + y -= vec.y; 1.45 + z -= vec.z; 1.46 +} 1.47 + 1.48 +void Vector3::operator *=(float scalar) { 1.49 + x *= scalar; 1.50 + y *= scalar; 1.51 + z *= scalar; 1.52 +} 1.53 + 1.54 +void Vector3::operator /=(float scalar) { 1.55 + x /= scalar; 1.56 + y /= scalar; 1.57 + z /= scalar; 1.58 +} 1.59 + 1.60 +Vector3 Vector3::operator -() const { 1.61 + return Vector3(-x, -y, -z); 1.62 +} 1.63 + 1.64 +bool Vector3::operator >(const Vector3 &vec) const { 1.65 + return LengthSq() > vec.LengthSq(); 1.66 +} 1.67 + 1.68 +bool Vector3::operator <(const Vector3 &vec) const { 1.69 + return LengthSq() < vec.LengthSq(); 1.70 +} 1.71 + 1.72 +bool Vector3::operator >(float len) const { 1.73 + return LengthSq() > len; 1.74 +} 1.75 + 1.76 +bool Vector3::operator <(float len) const { 1.77 + return LengthSq() < len; 1.78 +} 1.79 + 1.80 +bool Vector3::operator ==(const Vector3 &vec) const { 1.81 + return ((*this - vec).Length() < XSmallNumber); 1.82 +} 1.83 + 1.84 +bool Vector3::operator ==(float len) const { 1.85 + return ((this->Length() - len) < XSmallNumber); 1.86 +} 1.87 + 1.88 +Vector3::operator Vector2() const { 1.89 + return Vector2(x, y); 1.90 +} 1.91 + 1.92 +Vector3::operator Vector4() const { 1.93 + return Vector4(x, y, z, 1.0f); 1.94 +} 1.95 + 1.96 + 1.97 +float Vector3::Length() const { 1.98 + return (float)sqrt(x*x + y*y + z*z); 1.99 +} 1.100 + 1.101 +float Vector3::LengthSq() const { 1.102 + return x*x + y*y + z*z; 1.103 +} 1.104 + 1.105 +void Vector3::Normalize() { 1.106 + float len = (float)sqrt(x*x + y*y + z*z); 1.107 + x /= len; 1.108 + y /= len; 1.109 + z /= len; 1.110 +} 1.111 + 1.112 +Vector3 Vector3::Normalized() const { 1.113 + float len = (float)sqrt(x*x + y*y + z*z); 1.114 + return Vector3(x / len, y / len, z / len); 1.115 +} 1.116 + 1.117 +Vector3 Vector3::Reflection(const Vector3 &normal) const { 1.118 + return normal * this->DotProduct(normal) * 2.0f - *this; 1.119 +} 1.120 \ No newline at end of file