Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
JMATrigonometric.h
Go to the documentation of this file.
1#ifndef JMATRIGONOMETRIC_H
2#define JMATRIGONOMETRIC_H
3
4#include "dolphin/types.h"
5#include "utility.h"
6
7template<typename T>
9
14template<>
16 static f32 RADIAN_DEG090() { return 1.5707964f; }
17 static f32 RADIAN_DEG180() { return 3.1415927f; }
18 static f32 RADIAN_DEG360() { return 6.2831855f; }
19 static f32 RADIAN_TO_DEGREE_FACTOR() { return 180.0f / RADIAN_DEG180(); }
20};
21
26template<int N, typename T>
27struct TSinCosTable {
28 std::pair<T, T> table[1 << N];
29
30 T sinShort(s16 v) const { return table[(u16)v >> (16U - N)].first; }
31 T cosShort(s16 v) const { return table[(u16)v >> (16U - N)].second; }
32
33 inline T sinLap(T v) {
34 if (v < (T)0.0) {
35 return -table[(u16)(-(T)(1 << N) * v) & ((1 << N) - 1)].first;
36 }
37 return table[(u16)((T)(1 << N) * v) & ((1 << N) - 1)].first;
38 }
39
40 inline T sinDegree(T degree) {
41 if (degree < (T)0.0) {
42 return -table[(u16)(-((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].first;
43 }
44 return table[(u16)(((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].first;
45 }
46
47 inline T cosDegree(T degree) {
48 if (degree < (T)0.0) {
49 degree = -degree;
50 }
51 return table[(u16)(((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].second;
52 }
53
54 inline T sinRadian(T radian) {
55 if (radian < (T)0.0) {
56 return -table[(u16)(-(T)(1 << N) / TAngleConstant_<T>::RADIAN_DEG360() * radian) & ((1 << N) - 1)].first;
57 }
58 return table[(u16)((T)(1 << N) / TAngleConstant_<T>::RADIAN_DEG360() * radian) & ((1 << N) - 1)].first;
59 }
60};
61
66struct TAtanTable {
67 f32 table[1025];
68 u8 pad[0x1C];
69};
70
75struct TAsinAcosTable {
76 f32 table[1025];
77 u8 pad[0x1C];
78
80 if (x >= 1.0f) {
81 return 0.0f;
82 } else if (x <= -1.0f) {
84 } else if (x < 0.0f) {
85 return table[(u32)(-x * 1023.5f)] + TAngleConstant_<f32>::RADIAN_DEG090();
86 } else {
87 return TAngleConstant_<f32>::RADIAN_DEG090() - table[(u32)(x * 1023.5f)];
88 }
89 }
90
94};
95
96namespace JMath {
100
103}
104}; // namespace JMath
105
107 return JMath::sincosTable_.cosShort(v);
108}
110 return JMath::sincosTable_.sinShort(v);
111}
112
113inline f32 JMASCos(s16 v) {
114 return JMASCosShort(v);
115}
116inline f32 JMASSin(s16 v) {
117 return JMASinShort(v);
118}
119
121 return JMath::sincosTable_.sinLap(v);
122}
123
124inline f32 JMASinDegree(f32 degree) {
125 return JMath::sincosTable_.sinDegree(degree);
126}
127
128inline f32 JMACosDegree(f32 degree) {
129 return JMath::sincosTable_.cosDegree(degree);
130}
131
132inline f32 JMASinRadian(f32 radian) {
133 return JMath::sincosTable_.sinRadian(radian);
134}
135
136#endif /* JMATRIGONOMETRIC_H */
f32 JMASinShort(s16 v)
Definition JMATrigonometric.h:109
f32 JMASinLap(f32 v)
Definition JMATrigonometric.h:120
f32 JMASinDegree(f32 degree)
Definition JMATrigonometric.h:124
f32 JMASSin(s16 v)
Definition JMATrigonometric.h:116
f32 JMACosDegree(f32 degree)
Definition JMATrigonometric.h:128
f32 JMASinRadian(f32 radian)
Definition JMATrigonometric.h:132
f32 JMASCosShort(s16 v)
Definition JMATrigonometric.h:106
f32 JMASCos(s16 v)
Definition JMATrigonometric.h:113
double x double x
Definition e_atan2.c:58
double v
Definition e_pow.c:163
Definition JMATrigonometric.cpp:79
TAsinAcosTable asinAcosTable_
Definition JMATrigonometric.cpp:89
TAtanTable atanTable_
Definition JMATrigonometric.cpp:86
TSinCosTable< 13, f32 > sincosTable_
Definition JMATrigonometric.cpp:83
f32 acosDegree(f32 x)
Definition JMATrigonometric.h:101
static f32 RADIAN_DEG180()
Definition JMATrigonometric.h:17
static f32 RADIAN_DEG090()
Definition JMATrigonometric.h:16
static f32 RADIAN_DEG360()
Definition JMATrigonometric.h:18
static f32 RADIAN_TO_DEGREE_FACTOR()
Definition JMATrigonometric.h:19
Definition JMATrigonometric.h:8
Definition JMATrigonometric.cpp:63
f32 acosDegree(f32 x)
Definition JMATrigonometric.h:91
u8 pad[0x1C]
Definition JMATrigonometric.cpp:65
f32 acos_(f32 x)
Definition JMATrigonometric.h:79
f32 table[1025]
Definition JMATrigonometric.cpp:64
Definition JMATrigonometric.cpp:50
f32 table[1025]
Definition JMATrigonometric.cpp:51
u8 pad[0x1C]
Definition JMATrigonometric.cpp:52
Definition JMATrigonometric.cpp:36
T sinShort(s16 v) const
Definition JMATrigonometric.h:30
std::pair< T, T > table[1<< N]
Definition JMATrigonometric.cpp:37
T cosDegree(T degree)
Definition JMATrigonometric.h:47
T sinRadian(T radian)
Definition JMATrigonometric.h:54
T sinDegree(T degree)
Definition JMATrigonometric.h:40
T cosShort(s16 v) const
Definition JMATrigonometric.h:31
T sinLap(T v)
Definition JMATrigonometric.h:33
Definition utility.h:6
T2 second
Definition utility.h:8
T1 first
Definition utility.h:7
unsigned long u32
Definition types.h:9
signed short int s16
Definition types.h:6
float f32
Definition types.h:22
unsigned short int u16
Definition types.h:7
unsigned char u8
Definition types.h:5