VisLU Flow 0.1
|
00001 #ifndef VEC3_H 00002 #define VEC3_H 00003 00004 #include <iostream> 00005 #include <math.h> 00006 00007 class vec3 00008 { 00009 public: 00011 float v[3]; 00012 //constructors 00013 vec3(); 00014 vec3(float x, float y, float z = 0.0f); 00015 vec3(const float* u); 00016 vec3(const vec3&); 00018 float& operator[](unsigned); 00020 vec3& operator=(const vec3&); 00021 00022 //arithmetic assignments 00024 vec3& operator+=(const vec3&); 00026 vec3& operator-=(const vec3&); 00028 vec3& operator*=(float); 00030 vec3& operator/=(float); 00031 00032 //arithmetic operations 00034 const vec3 operator+(const vec3&) const; 00036 const vec3 operator-(const vec3&) const; 00038 const vec3 operator*(float) const; 00040 const vec3 operator/(float) const; 00041 00042 //boolean operators 00044 bool operator==(const vec3&) const; 00046 bool operator!=(const vec3&) const; 00047 00049 vec3& operator-(); 00051 float norm() const { 00052 return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; 00053 } 00055 float length() const { 00056 return sqrt(norm()); 00057 } 00059 vec3& operator!(); 00061 float dist2(const vec3&); 00063 float dist(const vec3&); 00065 float operator*(const vec3&) const; 00067 const vec3 operator^(const vec3&) const; 00068 00069 float dot(const vec3&) const; 00070 void normalize(void); 00071 00073 void print(); 00074 }; 00075 00077 std::ostream& operator<<(std::ostream&, const vec3&); 00078 00079 #endif