61 lines
1.4 KiB
C
Executable File
61 lines
1.4 KiB
C
Executable File
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#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_uint16(a) ((uint16_t)a>>FP_FRAC)
|
|
#define fp_make(a) ((fixpoint_t)(a * (1L<<FP_FRAC)))
|
|
|
|
#define fp_add(a,b) (a + b)
|
|
#define fp_sub(a,b) (a - b)
|
|
|
|
#define fp_mul(a,b) ((fixpoint_t)(((int64_t)a * (int64_t)b) >> 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<<FP_FRAC))
|
|
|
|
|
|
#include <math.h>
|
|
|
|
#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);
|