NW4F Sys
Loading...
Searching...
No Matches
math_Triangular.h
Go to the documentation of this file.
1#ifndef NW_MATH_TRIANGULAR_H_
2#define NW_MATH_TRIANGULAR_H_
3
4#include <nw/math/math_Constant.h>
5
6namespace nw { namespace math { namespace internal {
7
15
16extern const SinCosSample gSinCosTbl[256 + 1];
17
18} } } // namespace nw::math::internal
19
20namespace nw { namespace math {
21
22#define NW_MATH_RAD_TO_IDX(rad) (static_cast<u32>(static_cast<s64>((rad) * (::nw::math::I_HALF_ROUND_IDX / ::nw::math::F_PI))))
23#define NW_MATH_DEG_TO_IDX(deg) (static_cast<u32>(static_cast<s64>((deg) * (::nw::math::I_HALF_ROUND_IDX / 180.0f))))
24#define NW_MATH_DEG_TO_RAD(deg) ((deg) * (::nw::math::F_PI / 180.0f))
25#define NW_MATH_RAD_TO_DEG(rad) ((rad) * (180.0f / ::nw::math::F_PI))
26#define NW_MATH_IDX_TO_RAD(idx) ((idx) * (::nw::math::F_PI / ::nw::math::I_HALF_ROUND_IDX))
27#define NW_MATH_IDX_TO_DEG(idx) ((idx) * (180.0f / ::nw::math::I_HALF_ROUND_IDX))
28
29inline f32 RadToDeg(f32 rad)
30{
31 return rad * (180.0f / F_PI);
32}
33
34inline f32 DegToRad(f32 deg)
35{
36 return deg * (F_PI / 180.0f);
37}
38
39inline f32 SinIdx(u32 idx)
40{
41 u32 index = (idx >> 24) & 0xff;
42 u32 rest = idx & 0xffffff;
43
44 return internal::gSinCosTbl[index].sin_val + internal::gSinCosTbl[index].sin_delta * (static_cast<float>(rest) / static_cast<float>(0x1000000));
45}
46
47inline f32 CosIdx(u32 idx)
48{
49 u32 index = (idx >> 24) & 0xff;
50 u32 rest = idx & 0xffffff;
51
52 return internal::gSinCosTbl[index].cos_val + internal::gSinCosTbl[index].cos_delta * (static_cast<float>(rest) / static_cast<float>(0x1000000));
53}
54
55inline void SinCosIdx(f32* pSin, f32* pCos, u32 idx)
56{
57 u32 index = (idx >> 24) & 0xff;
58 f32 rest = static_cast<f32>(idx & 0xffffff) / 0x1000000;
59 const internal::SinCosSample* table = &internal::gSinCosTbl[index];
60
61 *pSin = table->sin_val + table->sin_delta * rest;
62 *pCos = table->cos_val + table->cos_delta * rest;
63}
64
65inline f32 TanIdx(u32 idx)
66{
67 u32 index = (idx >> 24) & 0xff;
68 f32 rest = static_cast<f32>(idx & 0xffffff) / 0x1000000;
69 const internal::SinCosSample* table = &internal::gSinCosTbl[index];
70
71 return (table->sin_val + table->sin_delta * rest) / (table->cos_val + table->cos_delta * rest);
72}
73
74#pragma clang diagnostic push
75#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion"
76
77inline f32 SinRad(f32 rad)
78{
79 return SinIdx(NW_MATH_RAD_TO_IDX(rad));
80}
81
82inline f32 CosRad(f32 rad)
83{
84 return CosIdx(NW_MATH_RAD_TO_IDX(rad));
85}
86
87inline void SinCosRad(f32* pSin, f32* pCos, f32 rad)
88{
89 SinCosIdx(pSin, pCos, NW_MATH_RAD_TO_IDX(rad));
90}
91
92inline f32 TanRad(f32 rad)
93{
94 return TanIdx(NW_MATH_RAD_TO_IDX(rad));
95}
96
97inline f32 SinDeg(f32 deg)
98{
99 return SinIdx(NW_MATH_DEG_TO_IDX(deg));
100}
101
102inline f32 CosDeg(f32 deg)
103{
104 return CosIdx(NW_MATH_DEG_TO_IDX(deg));
105}
106
107inline void SinCosDeg(f32* pSin, f32* pCos, f32 deg)
108{
109 SinCosIdx(pSin, pCos, NW_MATH_DEG_TO_IDX(deg));
110}
111
112inline f32 TanDeg(f32 deg)
113{
114 return TanIdx(NW_MATH_DEG_TO_IDX(deg));
115}
116
117} } // namespace nw::math
118
119#pragma clang diagnostic pop
120#endif // NW_MATH_TRIANGULAR_H_
#define NW_MATH_DEG_TO_IDX(deg)
Definition math_Triangular.h:23
#define NW_MATH_RAD_TO_IDX(rad)
Definition math_Triangular.h:22
Definition math_Triangular.cpp:3
const SinCosSample gSinCosTbl[256+1]
Definition math_Triangular.cpp:5
Definition math_Constant.cpp:5
f32 TanIdx(u32 idx)
Definition math_Triangular.h:65
f32 SinRad(f32 rad)
Definition math_Triangular.h:77
f32 SinIdx(u32 idx)
Definition math_Triangular.h:39
f32 TanDeg(f32 deg)
Definition math_Triangular.h:112
f32 SinDeg(f32 deg)
Definition math_Triangular.h:97
void SinCosIdx(f32 *pSin, f32 *pCos, u32 idx)
Definition math_Triangular.h:55
f32 CosRad(f32 rad)
Definition math_Triangular.h:82
f32 TanRad(f32 rad)
Definition math_Triangular.h:92
void SinCosDeg(f32 *pSin, f32 *pCos, f32 deg)
Definition math_Triangular.h:107
void SinCosRad(f32 *pSin, f32 *pCos, f32 rad)
Definition math_Triangular.h:87
f32 CosDeg(f32 deg)
Definition math_Triangular.h:102
f32 RadToDeg(f32 rad)
Definition math_Triangular.h:29
f32 DegToRad(f32 deg)
Definition math_Triangular.h:34
f32 CosIdx(u32 idx)
Definition math_Triangular.h:47
Definition math_Constant.cpp:5
Definition math_Triangular.h:9
f32 cos_val
Definition math_Triangular.h:12
f32 sin_delta
Definition math_Triangular.h:11
f32 sin_val
Definition math_Triangular.h:10
f32 cos_delta
Definition math_Triangular.h:13