00001
00006 #ifndef VECTOR4_H
00007 #define VECTOR4_H
00008
00009
00010
00011
00012
00013 #include <iostream>
00014 #include "defs.h"
00015 #include "Vector3.h"
00016
00017
00018
00019
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;
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