1#ifndef NW4R_MATH_TRIANGULAR_H
2#define NW4R_MATH_TRIANGULAR_H
3#include <nw4r/types_nw4r.h>
5#include <nw4r/math/math_arithmetic.h>
6#include <nw4r/math/math_constant.h>
14#define NW4R_MATH_IDX_TO_FIDX(x) ((x) * (1.0f / 256.0f))
17#define NW4R_MATH_DEG_TO_FIDX(x) ((x) * (256.0f / 360.0f))
18#define NW4R_MATH_FIDX_TO_DEG(x) ((x) * (360.0f / 256.0f))
21#define NW4R_MATH_RAD_TO_FIDX(x) ((x) * (128.0f / NW4R_MATH_PI))
22#define NW4R_MATH_FIDX_TO_RAD(x) ((x) * (NW4R_MATH_PI / 128.0f))
25#define NW4R_MATH_DEG_TO_RAD(x) ((x) * (NW4R_MATH_PI / 180.0f))
26#define NW4R_MATH_RAD_TO_DEG(x) ((x) * (180.0f / NW4R_MATH_PI))
38inline float SinF(
float ang) {
39 return SinFIdx(NW4R_MATH_IDX_TO_FIDX(ang));
41inline f32 SinIdx(
short idx) {
42 return SinF(U16ToF32(idx));
44inline f32 SinDeg(f32 deg) {
45 return SinFIdx(NW4R_MATH_DEG_TO_FIDX(deg));
47inline f32 SinRad(f32 rad) {
48 return SinFIdx(NW4R_MATH_RAD_TO_FIDX(rad));
58inline float CosF(
float ang) {
59 return CosFIdx(NW4R_MATH_IDX_TO_FIDX(ang));
61inline f32 CosIdx(
short idx) {
62 return CosF(U16ToF32(idx));
64inline f32 CosDeg(f32 deg) {
65 return CosFIdx(NW4R_MATH_DEG_TO_FIDX(deg));
67inline f32 CosRad(f32 rad) {
68 return CosFIdx(NW4R_MATH_RAD_TO_FIDX(rad));
76inline f32 TanFIdx(f32 fidx) {
77 return std::tanf(NW4R_MATH_FIDX_TO_RAD(fidx));
79inline f32 TanDeg(f32 deg) {
80 return TanFIdx(NW4R_MATH_DEG_TO_FIDX(deg));
82inline f32 TanRad(f32 rad) {
83 return TanFIdx(NW4R_MATH_RAD_TO_FIDX(rad));
91void SinCosFIdx(f32* pSin, f32* pCos, f32 fidx);
93inline void SinCosDeg(f32* pSin, f32* pCos, f32 deg) {
94 return SinCosFIdx(pSin, pCos, NW4R_MATH_DEG_TO_FIDX(deg));
96inline void SinCosRad(f32* pSin, f32* pCos, f32 rad) {
97 return SinCosFIdx(pSin, pCos, NW4R_MATH_RAD_TO_FIDX(rad));
107inline f32 AtanDeg(f32 x) {
108 return NW4R_MATH_FIDX_TO_DEG(AtanFIdx(x));
110inline f32 AtanRad(f32 x) {
111 return NW4R_MATH_FIDX_TO_RAD(AtanFIdx(x));
119f32 Atan2FIdx(f32 y, f32 x);
121inline f32 Atan2Deg(f32 y, f32 x) {
122 return NW4R_MATH_FIDX_TO_DEG(Atan2FIdx(y, x));
124inline f32 Atan2Rad(f32 y, f32 x) {
125 return NW4R_MATH_FIDX_TO_RAD(Atan2FIdx(y, x));