| Homepage | Demos | Overview | Downloads | Tutorials | Reference | Credits |
Measures.hGo 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 |