00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _vector4_h
00013 #define _vector4_h
00014
00015 #include <iostream>
00016
00017 template <typename Real>
00018 class Vector4
00019 {
00020 public:
00021 Vector4() { v[0] = v[1] = v[2] = v[3] = Real(0.0); }
00022 Vector4(Real c) { v[0] = v[1] = v[2] = v[3] = c; }
00023 Vector4(Real v0, Real v1, Real v2, Real v3) { v[0] = v0; v[1] = v1; v[2] = v2; v[3] = v3; }
00024 ~Vector4() { }
00025
00026 void load(std::istream& is) { is >> v[0] >> v[1] >> v[2] >> v[3]; }
00027 void save(std::ostream& os) const { os << v[0] << " " << v[1] << " " << v[2] << " " << v[3]; }
00028
00029 Real& operator[](unsigned int i) { return v[i]; }
00030 Real operator[](unsigned int i) const { return v[i]; }
00031 Real& operator()(unsigned int i) { return v[i]; }
00032 Real operator()(unsigned int i) const { return v[i]; }
00033
00034 Vector4 operator+(const Vector4& vec4) const { return Vector4(v[0]+vec4.v[0],v[1]+vec4.v[1],v[2]+vec4.v[2],v[3]+vec4.v[3]); }
00035 Vector4 operator-(const Vector4& vec4) const { return Vector4(v[0]-vec4.v[0],v[1]-vec4.v[1],v[2]-vec4.v[2],v[3]-vec4.v[3]); }
00036 Vector4 entryMult(const Vector4& vec4) const { return Vector4(v[0]*vec4.v[0],v[1]*vec4.v[1],v[2]*vec4.v[2],v[3]*vec4.v[3]); }
00037
00038 protected:
00039 Real v[4];
00040 };
00041
00042 template <typename Real1, typename Real2>
00043 Vector4<Real2> operator*(Real1 r, const Vector4<Real2>& v)
00044 {
00045 Vector4<Real2> res;
00046
00047 res[0] = v[0]*r;
00048 res[1] = v[1]*r;
00049 res[2] = v[2]*r;
00050 res[3] = v[3]*r;
00051
00052 return res;
00053 }
00054
00055 #endif