00001 #include "vector4.h" 00002 00007 #include <misc/string.h> 00008 00009 #include <cassert> 00010 #include <cmath> 00011 00012 #include <iostream> 00013 #include <algorithm> 00014 using namespace std; 00015 00016 Vector4::Vector4() 00017 { 00018 _vector[0] = _vector[1] = _vector[2] = _vector[3] = 0.0; 00019 } 00020 00021 Vector4::Vector4(const Vector4 &v) 00022 { 00023 _vector[0] = v._vector[0]; 00024 _vector[1] = v._vector[1]; 00025 _vector[2] = v._vector[2]; 00026 _vector[3] = v._vector[3]; 00027 } 00028 00029 Vector4::Vector4(const real x, const real y, const real z,const real w) 00030 { 00031 _vector[0] = x; 00032 _vector[1] = y; 00033 _vector[2] = z; 00034 _vector[3] = w; 00035 } 00036 00037 Vector4::Vector4(const float *v) 00038 { 00039 _vector[0] = v[0]; 00040 _vector[1] = v[1]; 00041 _vector[2] = v[2]; 00042 _vector[3] = v[3]; 00043 } 00044 00045 Vector4::Vector4(const double *v) 00046 { 00047 _vector[0] = v[0]; 00048 _vector[1] = v[1]; 00049 _vector[2] = v[2]; 00050 _vector[3] = v[3]; 00051 } 00052 00053 Vector4::Vector4(const string &str) 00054 { 00055 #ifndef NDEBUG 00056 const int n = 00057 #endif 00058 atoc(str,atof,"+-eE.0123456789",_vector+0,_vector+4); 00059 00060 assert(n==4); 00061 } 00062 00063 const real & 00064 Vector4::operator[](const int i) const 00065 { 00066 assert(i>=0 && i<4); 00067 return _vector[i]; 00068 } 00069 00070 real & 00071 Vector4::operator[](const int i) 00072 { 00073 assert(i>=0 && i<4); 00074 return _vector[i]; 00075 } 00076 00077 Vector4::operator real *() 00078 { 00079 return (real *) _vector; 00080 } 00081 00082 real &Vector4::x() { return _vector[0]; } 00083 const real &Vector4::x() const { return _vector[0]; } 00084 real &Vector4::y() { return _vector[1]; } 00085 const real &Vector4::y() const { return _vector[1]; } 00086 real &Vector4::z() { return _vector[2]; } 00087 const real &Vector4::z() const { return _vector[2]; } 00088 real &Vector4::w() { return _vector[3]; } 00089 const real &Vector4::w() const { return _vector[3]; } 00090 00091 00093 00099 ostream & 00100 operator<<(ostream &os, const Vector4 &x) 00101 { 00102 os << x[0] << '\t'; 00103 os << x[1] << '\t'; 00104 os << x[2] << '\t'; 00105 os << x[3]; 00106 00107 return os; 00108 } 00109 00115 istream & 00116 operator>>(istream &is, Vector4 &x) 00117 { 00118 is >> x[0]; 00119 is >> x[1]; 00120 is >> x[2]; 00121 is >> x[3]; 00122 00123 return is; 00124 } 00125