GEL
2
GEL is a library for Geometry and Linear Algebra
|
00001 #ifndef __CGLA_UNITVECTOR_H__ 00002 #define __CGLA_UNITVECTOR_H__ 00003 00004 #include "CGLA.h" 00005 #include "Vec3f.h" 00006 #include "TableTrigonometry.h" 00007 00008 namespace CGLA 00009 { 00010 namespace TT=TableTrigonometry; 00011 00017 class UnitVector 00018 { 00019 TT::Angle theta, phi; 00020 00021 void encode(const Vec3f& v) 00022 { 00023 theta = TT::t_atan(std::sqrt(CGLA::sqr(v[0])+CGLA::sqr(v[1])), v[2]); 00024 phi = TT::t_atan(v[0],v[1]); 00025 } 00026 00027 public: 00028 00030 explicit UnitVector(const Vec3f& v) {encode(v);} 00031 00033 explicit UnitVector(): theta(0), phi(0) {} 00034 00036 float t() const {return TT::angle2float(theta);} 00037 00039 float f() const {return TT::angle2float(phi);} 00040 00042 operator Vec3f() const 00043 { 00044 float costf = TT::t_cos(theta); 00045 return Vec3f(TT::t_cos(phi)*costf , 00046 TT::t_sin(phi)*costf, 00047 TT::t_sin(theta)); 00048 } 00049 00051 bool operator==(const UnitVector& u) const 00052 { 00053 return theta == u.theta && phi == u.phi; 00054 } 00055 }; 00056 00057 00059 inline std::ostream& operator<<(std::ostream& os, const UnitVector& u) 00060 { 00061 os << "<v=" << u.t() << " h=" << u.f() << ">"; 00062 return os; 00063 } 00064 00065 } 00066 #endif