3 * \brief Maths library used by ARDrone
4 * \author Sylvain Gaeremynck <sylvain.gaeremynck@parrot.com>
11 #include <VP_Os/vp_os_types.h>
20 ///////////////////////////////////////////////
23 #define RAD_TO_MDEG (57295.779513f)
24 #define RAD_TO_DEG (57.295779513f)
25 #define MDEG_TO_RAD (1.745329252e-05f)
26 #define DEG_TO_RAD (1.745329252e-02f)
27 #define PI (3.1415927f)
28 #define GRAVITY (9.81f)
31 #define min(a, b) (a) < (b) ? (a) : (b)
35 #define max(a, b) (a) < (b) ? (b) : (a)
38 typedef struct _screen_point_t {
43 typedef union _float_or_int_t {
48 extern float32_t f_epsilon;
50 bool_t f_is_zero( float32_t f );
51 float32_t f_zero( float32_t f );
53 static inline float32_t f_round(float32_t f, int32_t nb_decimal)
55 float32_t puissance = (float32_t) (10 ^ nb_decimal);
56 return ((int)(f * puissance) / puissance);
59 // Returns f's absolute value
60 static inline float32_t f_abs( float_or_int_t fi )
68 static inline void f_inv_sign( float_or_int_t* fi )
74 void f_polar_sat( float32_t max, float32_t* phi, float32_t* theta);
76 // Returns clamp value with value's sign
77 static inline float32_t f_set_clamp( float_or_int_t value, float_or_int_t clamp_value )
79 clamp_value.i |= value.i & 0x80000000;
84 float32_t asin_taylor( float32_t x );
85 float32_t atan2_taylor( float32_t num, float32_t den );
86 float32_t exp_taylor( float32_t x );
87 float32_t secant_taylor( float32_t x );
88 float32_t cos_taylor( float32_t x );
89 float32_t sin_taylor( float32_t x );
90 float32_t time_navdata_in_ms( uint32_t current_time, int32_t dec );
92 static inline uint32_t iabs(int32_t v) { return ( v < 0 ) ? -v : v; }
94 #if defined( USE_MINGW32 )
95 static inline void sincosf(float32_t a, float32_t* out_s, float32_t* out_c)
102 :"=m"(*out_s), "=m"(*out_c)
106 #elif defined( _MSC_VER ) || defined( TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR)
107 static inline void sincosf(float32_t a, float32_t* out_s, float32_t* out_c)
112 #endif // _MSC_VER || USE_MINGW32
115 uint32_t nb_bits_differents_8(uint32_t p, uint32_t q);
117 uint32_t nb_bits_differents(uint32_t p, uint32_t q);