找到一个 8bit 的方式,怎么计算 16bit 的表?
/***************************************************************************************
** 名 稱: atan2_8bit
** 參 數: a: 正弦值,b: 餘弦值
** 返 回: 角度(-127 ~ 127)
** 描 述: 反正切
**
***************************************************************************************/
signed char atan2(signed char x,signed char y)
{
unsigned char code myangle[] =
{
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 */
0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10,11,11,12,13,14,15,16,17,17,18,19,20,21,21,22,23,24,24,25,26,27,27,28,29,29,30,31,31,32,33,33,34,35,35,36,36,37,37,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45
};
bit nx = (x < 0),ny = (y < 0),cb;
if(x < 0)
x = -x;
if(y < 0)
y = -y;
if(x < y)
x = 90 - myangle[x * 64 / y];//余切值*64
else
x = myangle[y * 64 / x];//正切值*64
if(nx)
{
if(180 - x > 127)
x = 127;
else
x = 180 - x;
}
if(ny)
x = -x;
return x;
} |