61 lines
1.2 KiB
C++
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);
|
|
} |