#pragma once #include #define FP_FRAC 16 #define FP_MASK (0xFFFFFFFF >> (32-FP_FRAC)) typedef int32_t fixpoint_t; #define fp_float(a) (((double)a) / (1L<>FP_FRAC) #define fp_make(a) ((fixpoint_t)(a * (1L<> FP_FRAC)) #define fp_div(a,b) ((fixpoint_t)(((int64_t)a << FP_FRAC) / b)) #define fp_get_fraction(a) (((fixpoint_t)a) & FP_MASK) #define fp_trunc_to_int32(a) (a / (1L< #define FP_PI fp_make(M_PI) #define FP_2PI (2*FP_PI) #define FP_SQRT_2 fp_make(1.414213562373095) #define FP_INV_SQRT_2 fp_make(0.707106781) #define FP_SQRT_3 fp_make(1.73205080756887729352) #define FP_INV_SQRT_3 fp_make(0.577350269) /* Trigonometrische Funktionen [arc] = ° Intervalle: asin [-90 .. +90] acos [ 0 .. +180] */ fixpoint_t fp_sin(fixpoint_t arc); fixpoint_t fp_cos(fixpoint_t arc); fixpoint_t fp_tan(fixpoint_t arc); fixpoint_t fp_asin(fixpoint_t sin); fixpoint_t fp_acos(fixpoint_t cos); fixpoint_t fp_atan(fixpoint_t tan); fixpoint_t fp_normalize_arc(fixpoint_t arc); uint8_t* fp_toa(fixpoint_t value,int pre,int dec); uint8_t* fp_toa_r(uint8_t* buffer,fixpoint_t value,int pre,int dec); fixpoint_t fp_sin_lookup_reverse(fixpoint_t sin); fixpoint_t fp_sin_lookup(fixpoint_t arc090);