From b41cdb7186f48b995130a3074c53fa2fe096c7f7 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 9 Aug 2014 09:32:48 -0700 Subject: [PATCH] Vector4 +, -, negation, and * +, -, and negation were easy. Multiplication is wacky because the Matrix class does it. So, to do binary * (not *=) I needed to dynamic_cast the resulting Matrix<4,1> to a Vector4&&. --- src/basics/vector.cc | 81 ++++++++++++++++++++++++++++++++++++++++++++ src/basics/vector.hh | 13 +++++++ 2 files changed, 94 insertions(+) diff --git a/src/basics/vector.cc b/src/basics/vector.cc index e2913d5..5f68bfa 100644 --- a/src/basics/vector.cc +++ b/src/basics/vector.cc @@ -78,6 +78,9 @@ Vector4::Z() } +/* + * charles::basics::Vector4::Z -- + */ const Double& Vector4::Z() const @@ -86,6 +89,73 @@ Vector4::Z() } +/* + * charles::basics::Vector4::operator* -- + */ +Vector4 +Vector4::operator*(const Double& rhs) + const +{ + return dynamic_cast(*this * rhs); +} + + +/* + * charles::basics::Vector4::operator+ -- + */ +Vector4 +Vector4::operator+(const Vector4& rhs) + const +{ + return Vector4(*this) += rhs; +} + + +/* + * charles::basics::Vector4::operator+= -- + */ +Vector4& +Vector4::operator+=(const Vector4& rhs) +{ + mData[0] += rhs.mData[0]; + mData[1] += rhs.mData[1]; + mData[2] += rhs.mData[2]; + return *this; +} + + +/* + * charles::basics::Vector4::operator- -- + */ +Vector4 +Vector4::operator-(const Vector4& rhs) + const +{ + return Vector4(*this) -= rhs; +} + + +/* + * charles::basics::Vector4::operator-= -- + */ +Vector4& +Vector4::operator-=(const Vector4& rhs) +{ + return *this += -rhs; +} + + +/* + * charles::basics::Vector4::operator- -- + */ +Vector4 +Vector4::operator-() + const +{ + return Vector4(-X(), -Y(), -Z()); +} + + /* * charles::basics::Vector4::Length2 -- */ @@ -146,6 +216,17 @@ Vector4::Normalize() return *this; } + +/* + * charles::basics::operator* -- + */ +Vector4 +operator*(const Double& lhs, + const Vector4& rhs) +{ + return rhs * lhs; +} + } /* namespace basics */ } /* namespace charles */ diff --git a/src/basics/vector.hh b/src/basics/vector.hh index 4440e69..9f34437 100644 --- a/src/basics/vector.hh +++ b/src/basics/vector.hh @@ -32,6 +32,15 @@ struct Vector4 Double& Z(); const Double& Z() const; + Vector4 operator*(const Double& rhs) const; + + Vector4 operator+(const Vector4& rhs) const; + Vector4& operator+=(const Vector4& rhs); + Vector4 operator-(const Vector4& rhs) const; + Vector4& operator-=(const Vector4& rhs); + + Vector4 operator-() const; + /** Get the length-squared of this vector. */ Double Length2() const; @@ -49,6 +58,10 @@ struct Vector4 }; +/** Scalar multiplication of vectors, with the scalar factor on the left. */ +Vector4 operator*(const Double& lhs, const Vector4& rhs); + + /** Normalize the given vector and return a copy of it. */ Vector4& Normalized(const Vector4& v);