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); 00019 float dot(vec3); 00021 vec3& operator=(const vec3&); 00022 00023 //arithmetic assignments 00025 vec3& operator+=(const vec3&); 00027 vec3& operator-=(const vec3&); 00029 vec3& operator*=(float); 00031 vec3& operator/=(float); 00032 00033 //arithmetic operations 00035 const vec3 operator+(const vec3&) const; 00037 const vec3 operator-(const vec3&) const; 00039 const vec3 operator*(float) const; 00041 const vec3 operator/(float) const; 00042 00043 //boolean operators 00045 bool operator==(const vec3&) const; 00047 bool operator!=(const vec3&) const; 00048 00050 vec3& operator-(); 00052 float norm() const; 00054 float length() const; 00056 vec3& operator!(); 00058 float dist2(const vec3&); 00060 float dist(const vec3&); 00062 float operator*(const vec3&) const; 00064 const vec3 operator^(const vec3&) const; 00065 00067 void print(); 00068 }; 00069 00071 std::ostream& operator<<(std::ostream&, const vec3&); 00072 00073 #endif