Ignition Math

API Reference

5.1.0
Helpers.hh File Reference
#include <cmath>
#include <algorithm>
#include <limits>
#include <string>
#include <iostream>
#include <vector>
#include <tuple>
#include <utility>
#include <cstdint>
#include <ignition/math/config.hh>
#include "ignition/math/Export.hh"

Go to the source code of this file.

Namespaces

 ignition
 
 ignition::math
 Math classes and function useful in robot applications.
 

Macros

#define IGN_BOX_VOLUME(_x, _y, _z)   (_x *_y * _z)
 Compute box volume. More...
 
#define IGN_BOX_VOLUME_V(_v)   (_v.X() *_v.Y() * _v.Z())
 Compute box volume from a vector. More...
 
#define IGN_CYLINDER_VOLUME(_r, _l)   (_l * IGN_PI * std::pow(_r, 2))
 Compute cylinder volume. More...
 
#define IGN_DBL_INF   DPRCT_INF_D
 Double positive infinite value. More...
 
#define IGN_DBL_LOW   DPRCT_LOW_D
 Double low value, equivalent to -IGN_DBL_MAX. More...
 
#define IGN_DBL_MAX   DPRCT_MAX_D
 Double maximum value. This value will be similar to 1.79769e+308. More...
 
#define IGN_DBL_MIN   DPRCT_MIN_D
 Double min value. This value will be similar to 2.22507e-308. More...
 
#define IGN_FLT_INF   DPRCT_INF_F
 Float positive infinite value. More...
 
#define IGN_FLT_LOW   DPRCT_LOW_F
 Float lowest value, equivalent to -IGN_FLT_MAX. More...
 
#define IGN_FLT_MAX   DPRCT_MAX_F
 Float maximum value. This value will be similar to 3.40282e+38. More...
 
#define IGN_FLT_MIN   DPRCT_MIN_F
 Float minimum value. This value will be similar to 1.17549e-38. More...
 
#define IGN_FP_VOLATILE
 Define IGN_FP_VOLATILE for FP equality comparisons Use volatile parameters when checking floating point equality on the 387 math coprocessor to work around bugs from the 387 extra precision. More...
 
#define IGN_INT16_INF   DPRCT_INF_I16
 16-bit integer positive infinite value More...
 
#define IGN_INT16_LOW   DPRCT_LOW_I16
 16bit integer lowest value. This is equivalent to IGN_INT16_MIN, and is defined here for completeness. More...
 
#define IGN_INT16_MAX   DPRCT_MAX_I16
 16bit integer maximum value More...
 
#define IGN_INT16_MIN   DPRCT_MIN_I16
 16bit integer minimum value More...
 
#define IGN_INT32_INF   DPRCT_INF_I32
 32-bit integer positive infinite value More...
 
#define IGN_INT32_LOW   DPRCT_LOW_I32
 32bit integer minimum value. This is equivalent to IGN_INT32_MIN, and is defined here for completeness. More...
 
#define IGN_INT32_MAX   DPRCT_MAX_I32
 32bit integer maximum value More...
 
#define IGN_INT32_MIN   DPRCT_MIN_I32
 32bit integer minimum value More...
 
#define IGN_INT64_INF   DPRCT_INF_I64
 64-bit integer positive infinite value More...
 
#define IGN_INT64_LOW   DPRCT_LOW_I64
 64bit integer lowest value. This is equivalent to IGN_INT64_MIN, and is defined here for completeness. More...
 
#define IGN_INT64_MAX   DPRCT_MAX_I64
 64bit integer maximum value More...
 
#define IGN_INT64_MIN   DPRCT_MIN_I64
 64bit integer minimum value More...
 
#define IGN_PI   3.14159265358979323846
 Define IGN_PI, IGN_PI_2, and IGN_PI_4. This was put here for Windows support. More...
 
#define IGN_PI_2   1.57079632679489661923
 
#define IGN_PI_4   0.78539816339744830962
 
#define IGN_SPHERE_VOLUME(_radius)   (4.0*IGN_PI*std::pow(_radius, 3)/3.0)
 Compute sphere volume. More...
 
#define IGN_SQRT2   1.41421356237309504880
 
#define IGN_UINT16_INF   DPRCT_INF_UI16
 16-bit unsigned integer positive infinite value More...
 
#define IGN_UINT16_LOW   DPRCT_LOW_UI16
 16bit unsigned integer lowest value. This is equivalent to IGN_UINT16_MIN, and is defined here for completeness. More...
 
#define IGN_UINT16_MAX   DPRCT_MAX_UI16
 16bit unsigned integer maximum value More...
 
#define IGN_UINT16_MIN   DPRCT_MIN_UI16
 16bit unsigned integer minimum value More...
 
#define IGN_UINT32_INF   DPRCT_INF_UI32
 32-bit unsigned integer positive infinite value More...
 
#define IGN_UINT32_LOW   DPRCT_LOW_UI32
 32bit unsigned integer lowest value. This is equivalent to IGN_UINT32_MIN, and is defined here for completeness. More...
 
#define IGN_UINT32_MAX   DPRCT_MAX_UI32
 32bit unsigned integer maximum value More...
 
#define IGN_UINT32_MIN   DPRCT_MIN_UI32
 32bit unsigned integer minimum value More...
 
#define IGN_UINT64_INF   DPRCT_INF_UI64
 64-bit unsigned integer positive infinite value More...
 
#define IGN_UINT64_LOW   DPRCT_LOW_UI64
 64bit unsigned integer lowest value. This is equivalent to IGN_UINT64_MIN, and is defined here for completeness. More...
 
#define IGN_UINT64_MAX   DPRCT_MAX_UI64
 64bit unsigned integer maximum value More...
 
#define IGN_UINT64_MIN   DPRCT_MIN_UI64
 64bit unsigned integer minimum value More...
 

Typedefs

using PairInput = uint32_t
 
using PairOutput = uint64_t
 

Functions

template<typename T >
static const static double const static double const static double const static double const static float const static float const static float const static float const static uint16_t const static uint16_t const static uint16_t const static uint16_t const static int16_t const static int16_t const static int16_t const static int16_t const static uint32_t const static uint32_t const static uint32_t const static uint32_t const static int32_t const static int32_t const static int32_t const static int32_t const static uint64_t const static uint64_t const static uint64_t const static uint64_t const static int64_t const static int64_t const static int64_t const int64_t T clamp (T _v, T _min, T _max)
 Simple clamping function. More...
 
template<typename T >
bool equal (const T &_a, const T &_b, const T &_epsilon=T(1e-6))
 check if two values are equal, within a tolerance More...
 
float fixnan (float _v)
 Fix a nan value. More...
 
double fixnan (double _v)
 Fix a nan value. More...
 
template<typename T >
bool greaterOrNearEqual (const T &_a, const T &_b, const T &_epsilon=1e-6)
 inequality test, within a tolerance More...
 
bool isEven (const int _v)
 Check if parameter is even. More...
 
bool isEven (const unsigned int _v)
 Check if parameter is even. More...
 
bool isnan (float _v)
 check if a float is NaN More...
 
bool isnan (double _v)
 check if a double is NaN More...
 
bool isOdd (const int _v)
 Check if parameter is odd. More...
 
bool isOdd (const unsigned int _v)
 Check if parameter is odd. More...
 
bool isPowerOfTwo (unsigned int _x)
 Is this a power of 2? More...
 
template<typename T >
bool lessOrNearEqual (const T &_a, const T &_b, const T &_epsilon=1e-6)
 inequality test, within a tolerance More...
 
template<typename T >
max (const std::vector< T > &_values)
 get the maximum value of vector of values More...
 
template<typename T >
mean (const std::vector< T > &_values)
 get mean of vector of values More...
 
template<typename T >
min (const std::vector< T > &_values)
 get the minimum value of vector of values More...
 
PairOutput Pair (const PairInput _a, const PairInput _b)
 A pairing function that maps two values to a unique third value. This is an implement of Szudzik's function. More...
 
double parseFloat (const std::string &_input)
 parse string into float More...
 
int parseInt (const std::string &_input)
 parse string into an integer More...
 
template<typename T >
precision (const T &_a, const unsigned int &_precision)
 get value at a specified precision More...
 
unsigned int roundUpPowerOfTwo (unsigned int _x)
 Get the smallest power of two that is greater or equal to a given value. More...
 
template<typename T >
int sgn (T _value)
 The signum function. More...
 
template<typename T >
int signum (T _value)
 The signum function. More...
 
template<typename T >
void sort2 (T &_a, T &_b)
 Sort two numbers, such that _a <= _b. More...
 
template<typename T >
void sort3 (T &_a, T &_b, T &_c)
 Sort three numbers, such that _a <= _b <= _c. More...
 
std::tuple< PairInput, PairInput > Unpair (const PairOutput _key)
 The reverse of the Pair function. Accepts a key, produced from the Pair function, and returns a tuple consisting of the two non-negative integer values used to create the _key. More...
 
template<typename T >
variance (const std::vector< T > &_values)
 get variance of vector of values More...
 

Variables

static const size_t IGN_EIGHT_SIZE_T = 8u
 size_t type with a value of 8 More...
 
static const size_t IGN_FIVE_SIZE_T = 5u
 size_t type with a value of 5 More...
 
static const size_t IGN_FOUR_SIZE_T = 4u
 size_t type with a value of 4 More...
 
template<typename T >
constexpr T IGN_MASSMATRIX3_DEFAULT_TOLERANCE = T(10)
 The default tolerance value used by MassMatrix3::IsValid(), MassMatrix3::IsPositive(), and MassMatrix3::ValidMoments() More...
 
static const size_t IGN_NINE_SIZE_T = 9u
 size_t type with a value of 9 More...
 
static const size_t IGN_ONE_SIZE_T = 1u
 size_t type with a value of 1 More...
 
static const size_t IGN_SEVEN_SIZE_T = 7u
 size_t type with a value of 7 More...
 
static const size_t IGN_SIX_SIZE_T = 6u
 size_t type with a value of 6 More...
 
static const size_t IGN_THREE_SIZE_T = 3u
 size_t type with a value of 3 More...
 
static const size_t IGN_TWO_SIZE_T = 2u
 size_t type with a value of 2 More...
 
static const size_t IGN_ZERO_SIZE_T = 0u
 size_t type with a value of 0 More...
 
static const double INF_D = std::numeric_limits<double>::infinity()
 Double positive infinite value. More...
 
static const float INF_F = std::numeric_limits<float>::infinity()
 float positive infinite value More...
 
static const int16_t INF_I16 = std::numeric_limits<int16_t>::infinity()
 16-bit unsigned integer positive infinite value More...
 
static const int32_t INF_I32 = std::numeric_limits<int32_t>::infinity()
 32-bit unsigned integer positive infinite value More...
 
static const int64_t INF_I64 = std::numeric_limits<int64_t>::infinity()
 64-bit unsigned integer positive infinite value More...
 
static const uint16_t INF_UI16 = std::numeric_limits<uint16_t>::infinity()
 16-bit unsigned integer positive infinite value More...
 
static const uint32_t INF_UI32 = std::numeric_limits<uint32_t>::infinity()
 32-bit unsigned integer positive infinite value More...
 
static const uint64_t INF_UI64 = std::numeric_limits<uint64_t>::infinity()
 64-bit unsigned integer positive infinite value More...
 
static const double LOW_D = std::numeric_limits<double>::lowest()
 Double low value, equivalent to -MAX_D. More...
 
static const float LOW_F = std::numeric_limits<float>::lowest()
 Float low value, equivalent to -MAX_F. More...
 
static const int16_t LOW_I16 = std::numeric_limits<int16_t>::lowest()
 16bit unsigned integer lowest value. This is equivalent to IGN_INT16_MIN, and is defined here for completeness. More...
 
static const int32_t LOW_I32 = std::numeric_limits<int32_t>::lowest()
 32bit unsigned integer lowest value. This is equivalent to IGN_INT32_MIN, and is defined here for completeness. More...
 
static const int64_t LOW_I64 = std::numeric_limits<int64_t>::lowest()
 64bit unsigned integer lowest value. This is equivalent to IGN_INT64_MIN, and is defined here for completeness. More...
 
static const uint16_t LOW_UI16 = std::numeric_limits<uint16_t>::lowest()
 16bit unsigned integer lowest value. This is equivalent to IGN_UINT16_MIN, and is defined here for completeness. More...
 
static const uint32_t LOW_UI32 = std::numeric_limits<uint32_t>::lowest()
 32bit unsigned integer lowest value. This is equivalent to IGN_UINT32_MIN, and is defined here for completeness. More...
 
static const uint64_t LOW_UI64 = std::numeric_limits<uint64_t>::lowest()
 64bit unsigned integer lowest value. This is equivalent to IGN_UINT64_MIN, and is defined here for completeness. More...
 
static const double MAX_D = std::numeric_limits<double>::max()
 Double maximum value. This value will be similar to 1.79769e+308. More...
 
static const float MAX_F = std::numeric_limits<float>::max()
 Float maximum value. This value will be similar to 3.40282e+38. More...
 
static const int16_t MAX_I16 = std::numeric_limits<int16_t>::max()
 16bit unsigned integer maximum value More...
 
static const int32_t MAX_I32 = std::numeric_limits<int32_t>::max()
 32bit unsigned integer maximum value More...
 
static const int64_t MAX_I64 = std::numeric_limits<int64_t>::max()
 64bit unsigned integer maximum value More...
 
static const uint16_t MAX_UI16 = std::numeric_limits<uint16_t>::max()
 16bit unsigned integer maximum value More...
 
static const uint32_t MAX_UI32 = std::numeric_limits<uint32_t>::max()
 32bit unsigned integer maximum value More...
 
static const uint64_t MAX_UI64 = std::numeric_limits<uint64_t>::max()
 64bit unsigned integer maximum value More...
 
static const double MIN_D = std::numeric_limits<double>::min()
 Double min value. This value will be similar to 2.22507e-308. More...
 
static const float MIN_F = std::numeric_limits<float>::min()
 Float minimum value. This value will be similar to 1.17549e-38. More...
 
static const int16_t MIN_I16 = std::numeric_limits<int16_t>::min()
 16bit unsigned integer minimum value More...
 
static const int32_t MIN_I32 = std::numeric_limits<int32_t>::min()
 32bit unsigned integer minimum value More...
 
static const int64_t MIN_I64 = std::numeric_limits<int64_t>::min()
 64bit unsigned integer minimum value More...
 
static const uint16_t MIN_UI16 = std::numeric_limits<uint16_t>::min()
 16bit unsigned integer minimum value More...
 
static const uint32_t MIN_UI32 = std::numeric_limits<uint32_t>::min()
 32bit unsigned integer minimum value More...
 
static const uint64_t MIN_UI64 = std::numeric_limits<uint64_t>::min()
 64bit unsigned integer minimum value More...
 
static const double NAN_D = std::numeric_limits<double>::quiet_NaN()
 Returns the representation of a quiet not a number (NAN) More...
 
static const float NAN_F = std::numeric_limits<float>::quiet_NaN()
 Returns the representation of a quiet not a number (NAN) More...
 
static const int NAN_I = std::numeric_limits<int>::quiet_NaN()
 Returns the representation of a quiet not a number (NAN) More...
 

Macro Definition Documentation

◆ IGN_BOX_VOLUME

#define IGN_BOX_VOLUME (   _x,
  _y,
  _z 
)    (_x *_y * _z)

Compute box volume.

Parameters
[in]_xX length
[in]_yY length
[in]_zZ length

◆ IGN_BOX_VOLUME_V

#define IGN_BOX_VOLUME_V (   _v)    (_v.X() *_v.Y() * _v.Z())

Compute box volume from a vector.

Parameters
[in]_vVector3d that contains the box's dimensions.

◆ IGN_CYLINDER_VOLUME

#define IGN_CYLINDER_VOLUME (   _r,
  _l 
)    (_l * IGN_PI * std::pow(_r, 2))

Compute cylinder volume.

Parameters
[in]_rCylinder base radius
[in]_lCylinder length

◆ IGN_DBL_INF

#define IGN_DBL_INF   DPRCT_INF_D

Double positive infinite value.

Deprecated:
Use static const value instead.

◆ IGN_DBL_LOW

#define IGN_DBL_LOW   DPRCT_LOW_D

Double low value, equivalent to -IGN_DBL_MAX.

Deprecated:
Use static const value instead.

◆ IGN_DBL_MAX

#define IGN_DBL_MAX   DPRCT_MAX_D

Double maximum value. This value will be similar to 1.79769e+308.

Deprecated:
Use static const value instead.

◆ IGN_DBL_MIN

#define IGN_DBL_MIN   DPRCT_MIN_D

Double min value. This value will be similar to 2.22507e-308.

Deprecated:
Use static const value instead.

◆ IGN_FLT_INF

#define IGN_FLT_INF   DPRCT_INF_F

Float positive infinite value.

Deprecated:
Use static const value instead.

◆ IGN_FLT_LOW

#define IGN_FLT_LOW   DPRCT_LOW_F

Float lowest value, equivalent to -IGN_FLT_MAX.

Deprecated:
Use static const value instead.

◆ IGN_FLT_MAX

#define IGN_FLT_MAX   DPRCT_MAX_F

Float maximum value. This value will be similar to 3.40282e+38.

Deprecated:
Use static const value instead.

◆ IGN_FLT_MIN

#define IGN_FLT_MIN   DPRCT_MIN_F

Float minimum value. This value will be similar to 1.17549e-38.

Deprecated:
Use static const value instead.

◆ IGN_FP_VOLATILE

#define IGN_FP_VOLATILE

Define IGN_FP_VOLATILE for FP equality comparisons Use volatile parameters when checking floating point equality on the 387 math coprocessor to work around bugs from the 387 extra precision.

Referenced by ignition::math::equal().

◆ IGN_INT16_INF

#define IGN_INT16_INF   DPRCT_INF_I16

16-bit integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_INT16_LOW

#define IGN_INT16_LOW   DPRCT_LOW_I16

16bit integer lowest value. This is equivalent to IGN_INT16_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_INT16_MAX

#define IGN_INT16_MAX   DPRCT_MAX_I16

16bit integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_INT16_MIN

#define IGN_INT16_MIN   DPRCT_MIN_I16

16bit integer minimum value

Deprecated:
Use static const value instead.

◆ IGN_INT32_INF

#define IGN_INT32_INF   DPRCT_INF_I32

32-bit integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_INT32_LOW

#define IGN_INT32_LOW   DPRCT_LOW_I32

32bit integer minimum value. This is equivalent to IGN_INT32_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_INT32_MAX

#define IGN_INT32_MAX   DPRCT_MAX_I32

32bit integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_INT32_MIN

#define IGN_INT32_MIN   DPRCT_MIN_I32

32bit integer minimum value

Deprecated:
Use static const value instead.

◆ IGN_INT64_INF

#define IGN_INT64_INF   DPRCT_INF_I64

64-bit integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_INT64_LOW

#define IGN_INT64_LOW   DPRCT_LOW_I64

64bit integer lowest value. This is equivalent to IGN_INT64_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_INT64_MAX

#define IGN_INT64_MAX   DPRCT_MAX_I64

64bit integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_INT64_MIN

#define IGN_INT64_MIN   DPRCT_MIN_I64

64bit integer minimum value

Deprecated:
Use static const value instead.

◆ IGN_PI

◆ IGN_PI_2

#define IGN_PI_2   1.57079632679489661923

◆ IGN_PI_4

#define IGN_PI_4   0.78539816339744830962

◆ IGN_SPHERE_VOLUME

#define IGN_SPHERE_VOLUME (   _radius)    (4.0*IGN_PI*std::pow(_radius, 3)/3.0)

Compute sphere volume.

Parameters
[in]_radiusSphere radius

◆ IGN_SQRT2

#define IGN_SQRT2   1.41421356237309504880

◆ IGN_UINT16_INF

#define IGN_UINT16_INF   DPRCT_INF_UI16

16-bit unsigned integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_UINT16_LOW

#define IGN_UINT16_LOW   DPRCT_LOW_UI16

16bit unsigned integer lowest value. This is equivalent to IGN_UINT16_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_UINT16_MAX

#define IGN_UINT16_MAX   DPRCT_MAX_UI16

16bit unsigned integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_UINT16_MIN

#define IGN_UINT16_MIN   DPRCT_MIN_UI16

16bit unsigned integer minimum value

Deprecated:
Use static const value instead.

◆ IGN_UINT32_INF

#define IGN_UINT32_INF   DPRCT_INF_UI32

32-bit unsigned integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_UINT32_LOW

#define IGN_UINT32_LOW   DPRCT_LOW_UI32

32bit unsigned integer lowest value. This is equivalent to IGN_UINT32_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_UINT32_MAX

#define IGN_UINT32_MAX   DPRCT_MAX_UI32

32bit unsigned integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_UINT32_MIN

#define IGN_UINT32_MIN   DPRCT_MIN_UI32

32bit unsigned integer minimum value

Deprecated:
Use static const value instead.

◆ IGN_UINT64_INF

#define IGN_UINT64_INF   DPRCT_INF_UI64

64-bit unsigned integer positive infinite value

Deprecated:
Use static const value instead.

◆ IGN_UINT64_LOW

#define IGN_UINT64_LOW   DPRCT_LOW_UI64

64bit unsigned integer lowest value. This is equivalent to IGN_UINT64_MIN, and is defined here for completeness.

Deprecated:
Use static const value instead.

◆ IGN_UINT64_MAX

#define IGN_UINT64_MAX   DPRCT_MAX_UI64

64bit unsigned integer maximum value

Deprecated:
Use static const value instead.

◆ IGN_UINT64_MIN

#define IGN_UINT64_MIN   DPRCT_MIN_UI64

64bit unsigned integer minimum value

Deprecated:
Use static const value instead.

Variable Documentation

◆ IGN_MASSMATRIX3_DEFAULT_TOLERANCE

constexpr T IGN_MASSMATRIX3_DEFAULT_TOLERANCE = T(10)

The default tolerance value used by MassMatrix3::IsValid(), MassMatrix3::IsPositive(), and MassMatrix3::ValidMoments()