00001 #ifndef VEC3_H 00002 #define VEC3_H 00003 00004 #include <iostream> 00005 #include <math.h> 00009 class vec3 00010 { 00011 public: 00013 float v[3]; 00014 //constructors 00015 vec3(); 00016 vec3(float x, float y, float z = 0.0f); 00017 vec3(const float* u); 00018 vec3(const vec3&); 00020 float& operator[](unsigned); 00022 vec3& operator=(const vec3&); 00023 00024 //arithmetic assignments 00026 vec3& operator+=(const vec3&); 00028 vec3& operator-=(const vec3&); 00030 vec3& operator*=(float); 00032 vec3& operator/=(float); 00033 00034 //arithmetic operations 00036 const vec3 operator+(const vec3&) const; 00038 const vec3 operator-(const vec3&) const; 00040 const vec3 operator*(float) const; 00042 const vec3 operator/(float) const; 00043 00044 //boolean operators 00046 bool operator==(const vec3&) const; 00048 bool operator!=(const vec3&) const; 00049 00051 vec3& operator-(); 00053 float norm() const; 00055 float length() const; 00057 vec3& operator!(); 00059 float dist2(const vec3&); 00061 float dist(const vec3&); 00063 float operator*(const vec3&) const; 00065 const vec3 operator^(const vec3&) const; 00066 00068 void print(); 00069 }; 00070 00072 std::ostream& operator<<(std::ostream&, const vec3&); 00073 00074 #endif