Shmup/src/fast_trig.cpp

61 lines
1.2 KiB
C++

#include "fast_trig.h"
#include "num/num.h"
static libnum::num cosTable[360];
static libnum::num sinTable[360];
void Fast_Trig_Init( void )
{
for(int u=0; u<360; u++)
{
cosTable[u] = libnum::num( cos( u * PI / 180 ) );
sinTable[u] = libnum::num( sin( u * PI / 180 ) );
}
}
libnum::num FastCos( int16_t angle )
{
if (angle>=0 and angle<360) return cosTable[ angle ];
else
{
int16_t input = angle;
if (input<0)
{
while (input<0) input+=360;
return cosTable[ angle ];
}
else
{
while (input>=360) input-=360;
return cosTable[ angle ];
}
}
}
libnum::num FastSin( int16_t angle )
{
if (angle>=0 and angle<360) return sinTable[ angle ];
else
{
int16_t input = angle;
if (input<0)
{
while (input<0) input+=360;
return sinTable[ angle ];
}
else
{
while (input>=360) input-=360;
return sinTable[ angle ];
}
}
}
libnum::num FastTan( int16_t angle )
{
//TODO : work on representation of infinite number for angle = 90 degrees or angle = 270 degrees
return libnum::num(0);
}