Homepage Demos Overview Downloads Tutorials Reference
Credits

Measures.h

Go to the documentation of this file.
00001 #ifndef _MEASURES_H_
00002 #define _MEASURES_H_
00003 
00004 #include <math.h>
00005 
00006 namespace DualCoding {
00007 
00008 typedef float coordinate_t; //!< type used for positional coordinates
00009 typedef float orientation_t; //!< type used for orientation values (0 to Pi)
00010 typedef float direction_t; //!< type used for direction values (0 to 2*Pi)
00011   
00012 const direction_t Pi=M_PI; //!< shorthand for ::M_PI from math.h
00013 const direction_t TwoPi=2*M_PI; //!< shorthand for 2*M_PI 
00014 
00015 typedef coordinate_t Slope; //!< type used for ratio of coordinate offsets
00016 const Slope BIG_SLOPE=5000.0; //!< slopes larger than this are considered vertical, or in other words, infinite slopes are rounded to this
00017 
00018 //! Circular arithmetic on angles between 0 and pi (180 degrees)
00019 class AngPi {
00020  public:
00021   orientation_t value;
00022 
00023   AngPi(void) : value(0) {};
00024   AngPi(orientation_t const &v);
00025   AngPi operator+(AngPi const &arg) const { return AngPi(value+arg.value); };
00026   AngPi operator-(AngPi const &arg) const { return AngPi(value-arg.value); };
00027   AngPi operator*(orientation_t const &arg) const { return AngPi(value*arg); };
00028   AngPi operator/(orientation_t const &arg) const { return AngPi(value/arg); };
00029 
00030   AngPi& operator=(AngPi const &arg) { value = arg.value; return(*this); };
00031   AngPi& operator=(orientation_t const &arg) { value = AngPi(arg); return(*this); };
00032 
00033   operator orientation_t() const { return value; };
00034 };
00035 
00036 //! Angular distance: value is between 0 and pi
00037 AngPi angdist(AngPi const &arg1, AngPi const &arg2);
00038 
00039 //! Circular arithmetic on angles between 0 and two pi (360 degrees)
00040 class AngTwoPi {
00041  public:
00042   direction_t value;
00043 
00044   AngTwoPi(void) : value(0) {};
00045   AngTwoPi(direction_t const &v);
00046   AngTwoPi operator+(AngTwoPi const &arg) const { return AngTwoPi(value+arg.value); };
00047   AngTwoPi operator-(AngTwoPi const &arg) const { return AngTwoPi(value-arg.value); };
00048   AngTwoPi operator*(direction_t const &arg) const { return AngTwoPi(value*arg); };
00049   AngTwoPi operator/(direction_t const &arg) const { return AngTwoPi(value/arg); };
00050   
00051   AngTwoPi& operator=(AngTwoPi const &arg) { value = arg.value; return(*this); };
00052   AngTwoPi& operator=(direction_t const &arg) { value = AngTwoPi(arg); return(*this); };
00053   
00054   operator direction_t() const { return value; };
00055 };
00056 
00057 //! Angular distance: value is between 0 and pi
00058 AngPi angdist(AngTwoPi const &arg1, AngTwoPi const &arg2);
00059 
00060 //! Circular arithmetic on angles between -pi and pi (360 degrees)
00061 class AngSignPi {
00062  public:
00063   direction_t value;
00064 
00065   AngSignPi(void) : value(0) {};
00066   AngSignPi(direction_t const &v);
00067   AngSignPi operator+(AngSignPi const &arg) const { return AngSignPi(value+arg.value); };
00068   AngSignPi operator-(AngSignPi const &arg) const { return AngSignPi(value-arg.value); };
00069   AngSignPi operator*(direction_t const &arg) const { return AngSignPi(value*arg); };
00070   AngSignPi operator/(direction_t const &arg) const { return AngSignPi(value/arg); };
00071   
00072   AngSignPi& operator=(AngSignPi const &arg) { value = arg.value; return(*this); };
00073   AngSignPi& operator=(direction_t const &arg) { value = AngSignPi(arg); return(*this); };
00074   
00075   operator direction_t() const { return value; };
00076 };
00077 
00078 //! Angular distance: value is between 0 and pi
00079 AngPi angdist(AngSignPi const &arg1, AngSignPi const &arg2);
00080 
00081 } // namespace
00082 
00083 #endif

DualCoding 3.0beta
Generated Wed Oct 4 00:01:54 2006 by Doxygen 1.4.7