2021-03-28 22:49:05 +02:00
|
|
|
#ifndef JMATRIGONOMETRIC_H
|
|
|
|
|
#define JMATRIGONOMETRIC_H
|
|
|
|
|
|
|
|
|
|
#include "dolphin/types.h"
|
2023-05-05 16:17:19 -07:00
|
|
|
#include "MSL_C/utility.h"
|
2021-06-02 14:13:31 +02:00
|
|
|
|
|
|
|
|
struct TSinCosTable {
|
|
|
|
|
std::pair<f32, f32> table[0x2000];
|
2021-12-23 20:56:02 -08:00
|
|
|
|
2023-05-05 16:17:19 -07:00
|
|
|
f32 sinShort(s16 v) const { return table[static_cast<u16>(v) >> 3].first; }
|
|
|
|
|
f32 cosShort(s16 v) const { return table[static_cast<u16>(v) >> 3].second; }
|
2023-08-01 10:17:21 +03:00
|
|
|
|
|
|
|
|
inline f32 sinLap(f32 v) {
|
|
|
|
|
if (v < 0.0f) {
|
|
|
|
|
return -table[(u16)(-8192.0f * v) & 0x1fff].first;
|
|
|
|
|
}
|
|
|
|
|
return table[(u16)(8192.0f * v) & 0x1fff].first;
|
|
|
|
|
}
|
2021-06-02 14:13:31 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TAtanTable {
|
|
|
|
|
f32 table[1025];
|
|
|
|
|
u8 pad[0x1C];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TAsinAcosTable {
|
|
|
|
|
f32 table[1025];
|
|
|
|
|
u8 pad[0x1C];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
namespace JMath {
|
|
|
|
|
extern TSinCosTable sincosTable_;
|
|
|
|
|
extern TAtanTable atanTable_;
|
|
|
|
|
extern TAsinAcosTable asinAcosTable_;
|
|
|
|
|
}; // namespace JMath
|
|
|
|
|
|
2023-02-26 22:18:40 -08:00
|
|
|
inline f32 JMASCosShort(s16 v) {
|
|
|
|
|
return JMath::sincosTable_.cosShort(v);
|
|
|
|
|
}
|
|
|
|
|
inline f32 JMASinShort(s16 v) {
|
|
|
|
|
return JMath::sincosTable_.sinShort(v);
|
2021-12-23 20:56:02 -08:00
|
|
|
}
|
|
|
|
|
|
2023-02-26 22:18:40 -08:00
|
|
|
inline f32 JMASCos(s16 v) {
|
|
|
|
|
return JMASCosShort(v);
|
|
|
|
|
}
|
|
|
|
|
inline f32 JMASSin(s16 v) {
|
|
|
|
|
return JMASinShort(v);
|
2021-12-23 20:56:02 -08:00
|
|
|
}
|
|
|
|
|
|
2023-08-01 10:17:21 +03:00
|
|
|
inline f32 JMASinLap(f32 v) {
|
|
|
|
|
return JMath::sincosTable_.sinLap(v);
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-28 22:49:05 +02:00
|
|
|
#endif /* JMATRIGONOMETRIC_H */
|