Vector4.h

00001 
00006 #ifndef VECTOR4_H
00007 #define VECTOR4_H
00008 
00009 /*
00010 ** ---------------------------------------------------------------
00011 ** Includes:
00012 */
00013 #include <iostream>
00014 #include "defs.h"
00015 #include "Vector3.h"
00016 
00017 /*
00018 ** ---------------------------------------------------------------
00019 ** Definitions:
00020 */
00021 
00022 using namespace std;
00023 
00024 class Vector3;
00025 
00027 
00032 class Vector4 {
00033 
00034 public:
00035 
00036 
00038         Vector4 (void);
00040         Vector4 (Real x, Real y, Real z, Real w);
00042         Vector4(const Vector4 &vector); 
00044         Vector4(const Vector3 &vector,Real p = 1.0);    
00046         ~Vector4(void);
00047         
00049         Real &operator()(int comp);
00051         Real operator()(int comp) const;
00053         Vector4 &operator=(const Vector4 &u);           
00054 
00055 private :
00056 
00058         Real x,y,z,w;
00059         friend class Vector3; // for row() and col()
00060 };
00061 
00063 inline Real operator*(const Vector4 &u, const Vector4 &v);
00064 
00066 inline istream &operator>>(istream &is, Vector4 &vector);
00068 inline ostream &operator<<(ostream &os, const Vector4 &vector);
00069 
00070 inline
00071 Vector4::Vector4(void)
00072 {
00073         x = y = z = 0.0;
00074         w = 1.;
00075 }
00076 
00077 inline
00078 Vector4::Vector4(const Vector4 &vector)
00079         : x(vector(0)),
00080           y(vector(1)),
00081           z(vector(2)),
00082           w(vector(3))
00083 {
00084 }
00085 
00086 inline
00087 Vector4::Vector4(const Vector3 &vector,Real p = 1.0)
00088         : x(vector(0)),
00089           y(vector(1)),
00090           z(vector(2)),
00091           w(p)
00092 {
00093 }
00094 
00095 inline
00096 Vector4::Vector4(Real x_, Real y_, Real z_, Real w_)
00097         : x(x_),
00098           y(y_),
00099           z(z_),
00100           w(w_)
00101 {
00102 }
00103 
00104 inline Vector4 &
00105 Vector4::operator=(const Vector4 &vector)
00106 {
00107         x = vector(0);
00108         y = vector(1);
00109         z = vector(2);
00110         w = vector(3);
00111         return *this;
00112 }
00113 
00114 inline Real &
00115 Vector4::operator()(int comp)
00116 {
00117         return (comp == 0) ? x : (comp == 1) ? y : ( (comp == 2) ? z : w );
00118 }
00119 
00120 inline Real
00121 Vector4::operator()(int comp) const
00122 {
00123         return (comp == 0) ? x : (comp == 1) ? y : ( (comp == 2) ? z : w );
00124 }
00125 
00126 inline Real
00127 operator*(const Vector4 &u, const Vector4 &v)
00128 {
00129         return u(0)*v(0) + u(1)*v(1) + u(2)*v(2) + u(3)*v(3);
00130 }
00131 
00132 inline istream &
00133 operator>>(istream &is, Vector4 &vector)
00134 {
00135         is >> vector(0) >> vector(1) >> vector(2) >> vector(3);
00136         return is;
00137 }
00138 
00139 inline ostream &
00140 operator<<(ostream &os, const Vector4 &vector)
00141 {
00142         os << vector(0) << " " << vector(1) << " " << vector(2) << " " << vector(3);
00143         return os;
00144 }
00145 #endif //VECTOR4_H

Generated on Thu Jul 5 00:39:19 2007 for S3D by  doxygen 1.4.6