Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef MISC_H
00040 #define MISC_H
00041
00042 #include <Eigen/Core>
00043 #include <boost/utility.hpp>
00044 #include <boost/type_traits.hpp>
00045
00046
00047 namespace teb_local_planner
00048 {
00049
00050 #define SMALL_NUM 0.00000001
00051
00052
00053
00054
00062 inline bool is_close(double a, double b, double epsilon = 1e-4)
00063 {
00064 return std::fabs(a - b) < epsilon;
00065 }
00066
00072 inline double average_angles(const std::vector<double>& angles)
00073 {
00074 double x=0, y=0;
00075 for (std::vector<double>::const_iterator it = angles.begin(); it!=angles.end(); ++it)
00076 {
00077 x += cos(*it);
00078 y += sin(*it);
00079 }
00080 if(x == 0 && y == 0)
00081 return 0;
00082 else
00083 return std::atan2(y, x);
00084 }
00085
00087 inline bool smaller_than_abs(double i, double j) {return std::fabs(i)<std::fabs(j);}
00088
00089
00095 inline double fast_sigmoid(double x)
00096 {
00097 return x / (1 + fabs(x));
00098 }
00099
00106 template <typename P1, typename P2>
00107 inline double distance_points2d(const P1& point1, const P2& point2)
00108 {
00109 return std::sqrt( std::pow(point2.x-point1.x,2) + std::pow(point2.y-point1.y,2) );
00110 }
00111
00112
00119 template <typename V1, typename V2>
00120 inline double cross2d(const V1& v1, const V2& v2)
00121 {
00122 return v1.x()*v2.y() - v2.x()*v1.y();
00123 }
00124
00134 template<typename T>
00135 inline const T& get_const_reference(const T* ptr) {return *ptr;}
00136
00147 template<typename T>
00148 inline const T& get_const_reference(const T& val, typename boost::disable_if<boost::is_pointer<T> >::type* dummy = 0) {return val;}
00149
00150 }
00151
00152 #endif