Vector4.h

00001 /*************************************************************************************************
00002  *
00003  * Modeling and animation (TNM079) 2007
00004  * Code base for lab assignments. Copyright:
00005  *   Gunnar Johansson (gunnar.johansson@itn.liu.se)
00006  *   Ken Museth (ken.museth@itn.liu.se)
00007  *   Michael Bang Nielsen (bang@daimi.au.dk)
00008  *   Ola Nilsson (ola.nilsson@itn.liu.se)
00009  *   Andreas Söderström (andreas.soderstrom@itn.liu.se)
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

Generated on Fri Jul 20 23:57:42 2007 for HalfEdge by  doxygen 1.5.1