GEL  2
GEL is a library for Geometry and Linear Algebra
/Users/jab/Documents/Teaching/02585/GEL2_and_demos/GEL/src/CGLA/UnitVector.h
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations