From c49457a817d3f7d1301f56c4ccda28d610cc607d Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 9 Aug 2014 11:55:10 -0700 Subject: [PATCH] Implement Normalized, LinearCombination, and operator<< on Vector4s --- src/basics/vector.cc | 36 ++++++++++++++++++++++++++++++++++++ src/basics/vector.hh | 12 +++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/basics/vector.cc b/src/basics/vector.cc index a2d65f8..af09696 100644 --- a/src/basics/vector.cc +++ b/src/basics/vector.cc @@ -224,6 +224,42 @@ operator*(const Double& lhs, return rhs * lhs; } + +/* + * charles::basics::Normalized -- + */ +Vector4 +Normalized(const Vector4& v) +{ + return Vector4(v).Normalize(); +} + + +/* + * charles::basics::LinearCombination -- + */ +Vector4 +LinearCombination(const Double k1, const Vector4& v1, + const Double k2, const Vector4& v2, + const Double k3, const Vector4& v3) +{ + return Vector4(k1 * v1.X() + k2 * v2.X() + k3 * v3.X(), + k1 * v1.Y() + k2 * v2.Y() + k3 * v3.Y(), + k1 * v1.Z() + k2 * v2.Z() + k3 * v3.Z()); +} + + +/* + * charles::basics::operator<< -- + */ +std::ostream & +operator<<(std::ostream &os, const Vector3 &v) +{ + // Stream the vector like this: + os << "<" << v.X() << ", " << v.Y() << ", " << v.Z() << ">"; + return os; +} + } /* namespace basics */ } /* namespace charles */ diff --git a/src/basics/vector.hh b/src/basics/vector.hh index 4069d87..e5ce24c 100644 --- a/src/basics/vector.hh +++ b/src/basics/vector.hh @@ -6,6 +6,8 @@ #ifndef __BASICS_VECTOR_HH__ #define __BASICS_VECTOR_HH__ +#include + #include "basics/matrix.hh" #include "basics/types.hh" @@ -63,7 +65,15 @@ Vector4 operator*(const Double& lhs, const Vector4& rhs); /** Normalize the given vector and return a copy of it. */ -Vector4& Normalized(const Vector4& v); +Vector4 Normalized(const Vector4& v); + + +Vector4 LinearCombination(const Double k1, const Vector4& v1, + const Double k2, const Vector4& v2, + const Double k3, const Vector4& v3); + + +std::ostream& operator<<(std::ostream& ost, const Vector4& v); } /* namespace basics */ } /* namespace charles */