Tekkotsu Homepage | Demos | Overview | Downloads | Dev. Resources | Reference | Credits |
Measures.hGo to the documentation of this file.00001 #ifndef INCLUDED_Measures_h_ 00002 #define INCLUDED_Measures_h_ 00003 00004 #include <cmath> 00005 00006 typedef float coordinate_t; //!< type used for positional coordinates 00007 typedef float orientation_t; //!< type used for orientation values (0 to Pi) 00008 typedef float direction_t; //!< type used for direction values (0 to 2*Pi) 00009 00010 const direction_t Pi=M_PI; //!< shorthand for ::M_PI from math.h 00011 const direction_t TwoPi=2*M_PI; //!< shorthand for 2*M_PI 00012 00013 typedef coordinate_t Slope; //!< type used for ratio of coordinate offsets 00014 const Slope BIG_SLOPE=5000.0; //!< slopes larger than this are considered vertical, or in other words, infinite slopes are rounded to this 00015 00016 //! Circular arithmetic on angles between 0 and pi (180 degrees) 00017 class AngPi { 00018 friend AngPi angdist(AngPi const &arg1, AngPi const &arg2); 00019 public: 00020 AngPi(void) : value(0) {}; //!< constructor, #value defaults to 0 00021 AngPi(orientation_t const &v) : value(v) { normalize(); } //!< conversion operator allows implicit construction from primitive 00022 00023 AngPi operator+(AngPi const &arg) const { return AngPi(value+arg.value); }; 00024 AngPi operator-(AngPi const &arg) const { return AngPi(value-arg.value); }; 00025 AngPi operator*(orientation_t const &arg) const { return AngPi(value*arg); }; 00026 AngPi operator/(orientation_t const &arg) const { return AngPi(value/arg); }; 00027 00028 AngPi& operator=(AngPi const &arg) { value = arg.value; return(*this); }; 00029 AngPi& operator=(orientation_t const &arg) { value = arg; normalize(); return(*this); }; 00030 AngPi& operator+=(orientation_t const &arg) { value += arg; normalize(); return(*this); }; 00031 AngPi& operator-=(orientation_t const &arg) { value -= arg; normalize(); return(*this); }; 00032 AngPi& operator*=(orientation_t const &arg) { value *= arg; normalize(); return(*this); }; 00033 AngPi& operator/=(orientation_t const &arg) { value /= arg; normalize(); return(*this); }; 00034 00035 operator orientation_t() const { return value; }; //!< conversion operator for going back to the primitive type 00036 00037 protected: 00038 void normalize(); //!< modifies #value to put it back in range 00039 orientation_t value; //!< holds the angle, should be kept normalized at all times 00040 }; 00041 00042 //! Angular distance: value is between 0 and pi/2 00043 AngPi angdist(AngPi const &arg1, AngPi const &arg2); 00044 00045 //! Circular arithmetic on angles between 0 and two pi (360 degrees) 00046 class AngTwoPi { 00047 friend AngPi angdist(AngTwoPi const &arg1, AngTwoPi const &arg2); 00048 public: 00049 AngTwoPi(void) : value(0) {}; //!< constructor, #value defaults to 0 00050 AngTwoPi(direction_t const &v) : value(v) { normalize(); } //!< conversion operator allows implicit construction from primitive 00051 00052 AngTwoPi operator+(AngTwoPi const &arg) const { return AngTwoPi(value+arg.value); }; 00053 AngTwoPi operator-(AngTwoPi const &arg) const { return AngTwoPi(value-arg.value); }; 00054 AngTwoPi operator*(direction_t const &arg) const { return AngTwoPi(value*arg); }; 00055 AngTwoPi operator/(direction_t const &arg) const { return AngTwoPi(value/arg); }; 00056 00057 AngTwoPi& operator=(AngTwoPi const &arg) { value = arg.value; return(*this); }; 00058 AngTwoPi& operator=(direction_t const &arg) { value = arg; normalize(); return(*this); }; 00059 AngTwoPi& operator+=(direction_t const &arg) { value += arg; normalize(); return(*this); }; 00060 AngTwoPi& operator-=(direction_t const &arg) { value -= arg; normalize(); return(*this); }; 00061 AngTwoPi& operator*=(direction_t const &arg) { value *= arg; normalize(); return(*this); }; 00062 AngTwoPi& operator/=(direction_t const &arg) { value /= arg; normalize(); return(*this); }; 00063 00064 operator direction_t() const { return value; }; //!< conversion operator for going back to the primitive type 00065 00066 protected: 00067 void normalize(); //!< modifies #value to put it back in range 00068 direction_t value; //!< holds the angle, should be kept normalized at all times 00069 }; 00070 00071 //! Angular distance: value is between 0 and pi 00072 AngPi angdist(AngTwoPi const &arg1, AngTwoPi const &arg2); 00073 00074 //! Circular arithmetic on angles between -pi and pi (360 degrees) 00075 class AngSignPi { 00076 friend AngPi angdist(AngSignPi const &arg1, AngSignPi const &arg2); 00077 public: 00078 AngSignPi(void) : value(0) {}; //!< constructor, #value defaults to 0 00079 AngSignPi(direction_t const &v) : value(v) { normalize(); } //!< conversion operator allows implicit construction from primitive 00080 00081 AngSignPi operator+(AngSignPi const &arg) const { return AngSignPi(value+arg.value); }; 00082 AngSignPi operator-(AngSignPi const &arg) const { return AngSignPi(value-arg.value); }; 00083 AngSignPi operator*(direction_t const &arg) const { return AngSignPi(value*arg); }; 00084 AngSignPi operator/(direction_t const &arg) const { return AngSignPi(value/arg); }; 00085 00086 AngSignPi& operator=(AngSignPi const &arg) { value = arg.value; return(*this); }; 00087 AngSignPi& operator=(direction_t const &arg) { value = arg; normalize(); return(*this); }; 00088 AngSignPi& operator+=(direction_t const &arg) { value += arg; normalize(); return(*this); }; 00089 AngSignPi& operator-=(direction_t const &arg) { value -= arg; normalize(); return(*this); }; 00090 AngSignPi& operator*=(direction_t const &arg) { value *= arg; normalize(); return(*this); }; 00091 AngSignPi& operator/=(direction_t const &arg) { value /= arg; normalize(); return(*this); }; 00092 00093 operator direction_t() const { return value; }; //!< conversion operator for going back to the primitive type 00094 00095 protected: 00096 void normalize(); //!< modifies #value to put it back in range 00097 direction_t value; //!< holds the angle, should be kept normalized at all times 00098 }; 00099 00100 //! Angular distance: value is between 0 and pi 00101 AngPi angdist(AngSignPi const &arg1, AngSignPi const &arg2); 00102 00103 #endif |
Tekkotsu v4.0 |
Generated Thu Nov 22 00:54:54 2007 by Doxygen 1.5.4 |