Path: blob/main/RSDKv4/Math.cpp
817 views
#include "RetroEngine.hpp"1#include <math.h>2#include <time.h>34int sinM7LookupTable[0x200];5int cosM7LookupTable[0x200];67int sin512LookupTable[0x200];8int cos512LookupTable[0x200];910int sin256LookupTable[0x100];11int cos256LookupTable[0x100];1213byte arcTan256LookupTable[0x100 * 0x100];1415void CalculateTrigAngles()16{17srand(time(NULL));1819for (int i = 0; i < 0x200; ++i) {20sinM7LookupTable[i] = (sin((i / 256.0) * M_PI) * 4096.0);21cosM7LookupTable[i] = (cos((i / 256.0) * M_PI) * 4096.0);22}2324cosM7LookupTable[0x00] = 0x1000;25cosM7LookupTable[0x80] = 0;26cosM7LookupTable[0x100] = -0x1000;27cosM7LookupTable[0x180] = 0;2829sinM7LookupTable[0x00] = 0;30sinM7LookupTable[0x80] = 0x1000;31sinM7LookupTable[0x100] = 0;32sinM7LookupTable[0x180] = -0x1000;3334for (int i = 0; i < 0x200; ++i) {35sin512LookupTable[i] = (sinf((i / 256.0) * M_PI) * 512.0);36cos512LookupTable[i] = (cosf((i / 256.0) * M_PI) * 512.0);37}3839cos512LookupTable[0x00] = 0x200;40cos512LookupTable[0x80] = 0;41cos512LookupTable[0x100] = -0x200;42cos512LookupTable[0x180] = 0;4344sin512LookupTable[0x00] = 0;45sin512LookupTable[0x80] = 0x200;46sin512LookupTable[0x100] = 0;47sin512LookupTable[0x180] = -0x200;4849for (int i = 0; i < 0x100; i++) {50sin256LookupTable[i] = (sin512LookupTable[i * 2] >> 1);51cos256LookupTable[i] = (cos512LookupTable[i * 2] >> 1);52}5354for (int Y = 0; Y < 0x100; ++Y) {55byte *atan = (byte *)&arcTan256LookupTable[Y];56for (int X = 0; X < 0x100; ++X) {57float angle = atan2f(Y, X);58*atan = (angle * 40.743664f);59atan += 0x100;60}61}62}6364byte ArcTanLookup(int X, int Y)65{66int x = 0;67int y = 0;6869x = abs(X);70y = abs(Y);7172if (x <= y) {73while (y > 0xFF) {74x >>= 4;75y >>= 4;76}77}78else {79while (x > 0xFF) {80x >>= 4;81y >>= 4;82}83}84if (X <= 0) {85if (Y <= 0)86return arcTan256LookupTable[(x << 8) + y] + -0x80;87else88return -0x80 - arcTan256LookupTable[(x << 8) + y];89}90else if (Y <= 0)91return -arcTan256LookupTable[(x << 8) + y];92else93return arcTan256LookupTable[(x << 8) + y];94}959697