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; 00053 float length() const; 00055 vec3& operator!(); 00057 float dist2(const vec3&); 00059 float dist(const vec3&); 00061 float operator*(const vec3&) const; 00063 const vec3 operator^(const vec3&) const; 00064 00066 void print(); 00067 00068 const float GetSquaredMagnitude() const 00069 { 00070 return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); 00071 }; 00072 }; 00073 00075 std::ostream& operator<<(std::ostream&, const vec3&); 00076 00077 #endif