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
7namespace JMath {
8template<typename T>
10
15template<>
17 static f32 RADIAN_DEG090() { return 1.5707964f; }
18 static f32 RADIAN_DEG180() { return 3.1415927f; }
19 static f32 RADIAN_DEG360() { return 6.2831855f; }
20 static f32 RADIAN_TO_DEGREE_FACTOR() { return 180.0f / RADIAN_DEG180(); }
21};
22
27template<int N, typename T>
30
31 T sinShort(s16 v) const { return table[(u16)v >> (16U - N)].first; }
32 T cosShort(s16 v) const { return table[(u16)v >> (16U - N)].second; }
33
34 inline T sinLap(T v) const {
35 if (v < (T)0.0) {
36 return -table[(u16)(-(T)(1 << N) * v) & ((1 << N) - 1)].first;
37 }
38 return table[(u16)((T)(1 << N) * v) & ((1 << N) - 1)].first;
39 }
40
41 inline T sinDegree(T degree) const {
42 if (degree < (T)0.0) {
43 return -table[(u16)(-((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].first;
44 }
45 return table[(u16)(((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].first;
46 }
47
48 inline T cosDegree(T degree) const {
49 if (degree < (T)0.0) {
50 degree = -degree;
51 }
52 return table[(u16)(((T)(1 << N) / (T)360.0) * degree) & ((1 << N) - 1)].second;
53 }
54
55 inline T sinRadian(T radian) const {
56 if (radian < (T)0.0) {
57 return -table[(u16)(-(T)(1 << N) / TAngleConstant_<T>::RADIAN_DEG360() * radian) & ((1 << N) - 1)].first;
58 }
59 return table[(u16)((T)(1 << N) / TAngleConstant_<T>::RADIAN_DEG360() * radian) & ((1 << N) - 1)].first;
60 }
61};
62
67struct TAtanTable {
68 f32 table[1025];
69 u8 pad[0x1C];
70};
71
76template<int N, typename T>
78 T table[1025];
79 u8 pad[0x1C];
80
81 T acos_(T x) const {
82 if (x >= 1.0f) {
83 return 0.0f;
84 } else if (x <= -1.0f) {
86 } else if (x < 0.0f) {
87 return table[(u32)(-x * 1023.5f)] + TAngleConstant_<T>::RADIAN_DEG090();
88 } else {
89 return TAngleConstant_<T>::RADIAN_DEG090() - table[(u32)(x * 1023.5f)];
90 }
91 }
92
96};
97
101
103 return asinAcosTable_.acosDegree(x);
104}
105}; // namespace JMath
106
108 return JMath::sincosTable_.cosShort(v);
109}
111 return JMath::sincosTable_.sinShort(v);
112}
113
114inline f32 JMASCos(s16 v) {
115 return JMACosShort(v);
116}
117inline f32 JMASSin(s16 v) {
118 return JMASinShort(v);
119}
120
122 return JMath::sincosTable_.sinLap(v);
123}
124
125inline f32 JMASinDegree(f32 degree) {
126 return JMath::sincosTable_.sinDegree(degree);
127}
128
129inline f32 JMACosDegree(f32 degree) {
130 return JMath::sincosTable_.cosDegree(degree);
131}
132
133inline f32 JMASinRadian(f32 radian) {
134 return JMath::sincosTable_.sinRadian(radian);
135}
136
137#endif /* JMATRIGONOMETRIC_H */
f32 JMASinShort(s16 v)
Definition JMATrigonometric.h:110
f32 JMASinLap(f32 v)
Definition JMATrigonometric.h:121
f32 JMASinDegree(f32 degree)
Definition JMATrigonometric.h:125
f32 JMASSin(s16 v)
Definition JMATrigonometric.h:117
f32 JMACosShort(s16 v)
Definition JMATrigonometric.h:107
f32 JMACosDegree(f32 degree)
Definition JMATrigonometric.h:129
f32 JMASinRadian(f32 radian)
Definition JMATrigonometric.h:133
f32 JMASCos(s16 v)
Definition JMATrigonometric.h:114
unsigned long u32
Definition types.h:12
signed short int s16
Definition types.h:9
float f32
Definition types.h:25
unsigned short int u16
Definition types.h:10
unsigned char u8
Definition types.h:8
double x double x
Definition e_atan2.c:58
double v
Definition e_pow.c:163
Definition JMATrigonometric.cpp:71
TAtanTable atanTable_
TSinCosTable< 13, f32 > sincosTable_
f32 acosDegree(f32 x)
Definition JMATrigonometric.h:102
TAsinAcosTable< 1024, f32 > asinAcosTable_
static f32 RADIAN_TO_DEGREE_FACTOR()
Definition JMATrigonometric.h:20
static f32 RADIAN_DEG180()
Definition JMATrigonometric.h:18
static f32 RADIAN_DEG360()
Definition JMATrigonometric.h:19
static f32 RADIAN_DEG090()
Definition JMATrigonometric.h:17
Definition JMATrigonometric.h:9
Definition JMATrigonometric.h:77
T table[1025]
Definition JMATrigonometric.h:78
T acosDegree(T x) const
Definition JMATrigonometric.h:93
T acos_(T x) const
Definition JMATrigonometric.h:81
u8 pad[0x1C]
Definition JMATrigonometric.h:79
Definition JMATrigonometric.h:67
u8 pad[0x1C]
Definition JMATrigonometric.h:69
f32 table[1025]
Definition JMATrigonometric.h:68
Definition JMATrigonometric.h:28
T sinDegree(T degree) const
Definition JMATrigonometric.h:41
T cosShort(s16 v) const
Definition JMATrigonometric.h:32
T cosDegree(T degree) const
Definition JMATrigonometric.h:48
T sinShort(s16 v) const
Definition JMATrigonometric.h:31
T sinLap(T v) const
Definition JMATrigonometric.h:34
T sinRadian(T radian) const
Definition JMATrigonometric.h:55
std::pair< T, T > table[1<< N]
Definition JMATrigonometric.h:29
Definition JMATrigonometric.cpp:59
Definition JMATrigonometric.cpp:46
Definition JMATrigonometric.cpp:32
Definition utility.h:6
T2 second
Definition utility.h:8
T1 first
Definition utility.h:7