|
|
/*******************************************************************************
|
|
|
* Copyright(c) 2023 Levetop Semiconductor Co.,Led. All rights reserved.
|
|
|
* @file sincostable.c
|
|
|
* @author UartTFT Application Team
|
|
|
* @version V1.0.0
|
|
|
* @date 2023-01-01
|
|
|
* @brief
|
|
|
********************************************************************************/
|
|
|
|
|
|
|
|
|
#include "sincostable.h"
|
|
|
|
|
|
const float SinCosTable[91][2] = {
|
|
|
0.000000, 1.000000,
|
|
|
0.017452, 0.999848,
|
|
|
0.034899, 0.999391,
|
|
|
0.052336, 0.998630,
|
|
|
0.069756, 0.997564,
|
|
|
0.087156, 0.996195,
|
|
|
0.104528, 0.994522,
|
|
|
0.121869, 0.992546,
|
|
|
0.139173, 0.990268,
|
|
|
0.156434, 0.987688,
|
|
|
0.173648, 0.984808,
|
|
|
0.190809, 0.981627,
|
|
|
0.207912, 0.978148,
|
|
|
0.224951, 0.974370,
|
|
|
0.241922, 0.970296,
|
|
|
0.258819, 0.965926,
|
|
|
0.275637, 0.961262,
|
|
|
0.292372, 0.956305,
|
|
|
0.309017, 0.951057,
|
|
|
0.325568, 0.945519,
|
|
|
0.342020, 0.939693,
|
|
|
0.358368, 0.933580,
|
|
|
0.374607, 0.927184,
|
|
|
0.390731, 0.920505,
|
|
|
0.406737, 0.913545,
|
|
|
0.422618, 0.906308,
|
|
|
0.438371, 0.898794,
|
|
|
0.453990, 0.891007,
|
|
|
0.469472, 0.882948,
|
|
|
0.484810, 0.874620,
|
|
|
0.500000, 0.866025,
|
|
|
0.515038, 0.857167,
|
|
|
0.529919, 0.848048,
|
|
|
0.544639, 0.838671,
|
|
|
0.559193, 0.829038,
|
|
|
0.573576, 0.819152,
|
|
|
0.587785, 0.809017,
|
|
|
0.601815, 0.798636,
|
|
|
0.615661, 0.788011,
|
|
|
0.629320, 0.777146,
|
|
|
0.642788, 0.766044,
|
|
|
0.656059, 0.754710,
|
|
|
0.669131, 0.743145,
|
|
|
0.681998, 0.731354,
|
|
|
0.694658, 0.719340,
|
|
|
0.707107, 0.707107,
|
|
|
0.719340, 0.694658,
|
|
|
0.731354, 0.681998,
|
|
|
0.743145, 0.669131,
|
|
|
0.754710, 0.656059,
|
|
|
0.766044, 0.642788,
|
|
|
0.777146, 0.629320,
|
|
|
0.788011, 0.615661,
|
|
|
0.798636, 0.601815,
|
|
|
0.809017, 0.587785,
|
|
|
0.819152, 0.573576,
|
|
|
0.829038, 0.559193,
|
|
|
0.838671, 0.544639,
|
|
|
0.848048, 0.529919,
|
|
|
0.857167, 0.515038,
|
|
|
0.866025, 0.500000,
|
|
|
0.874620, 0.484810,
|
|
|
0.882948, 0.469472,
|
|
|
0.891007, 0.453990,
|
|
|
0.898794, 0.438371,
|
|
|
0.906308, 0.422618,
|
|
|
0.913545, 0.406737,
|
|
|
0.920505, 0.390731,
|
|
|
0.927184, 0.374607,
|
|
|
0.933580, 0.358368,
|
|
|
0.939693, 0.342020,
|
|
|
0.945519, 0.325568,
|
|
|
0.951057, 0.309017,
|
|
|
0.956305, 0.292372,
|
|
|
0.961262, 0.275637,
|
|
|
0.965926, 0.258819,
|
|
|
0.970296, 0.241922,
|
|
|
0.974370, 0.224951,
|
|
|
0.978148, 0.207912,
|
|
|
0.981627, 0.190809,
|
|
|
0.984808, 0.173648,
|
|
|
0.987688, 0.156434,
|
|
|
0.990268, 0.139173,
|
|
|
0.992546, 0.121869,
|
|
|
0.994522, 0.104528,
|
|
|
0.996195, 0.087156,
|
|
|
0.997564, 0.069756,
|
|
|
0.998630, 0.052336,
|
|
|
0.999391, 0.034899,
|
|
|
0.999848, 0.017452,
|
|
|
1.000000, 0.000000};
|
|
|
|
|
|
const float tanTable[46] = {
|
|
|
0.000000,
|
|
|
0.017455,
|
|
|
0.034920,
|
|
|
0.052407,
|
|
|
0.069926,
|
|
|
0.087488, // 5
|
|
|
0.105104,
|
|
|
0.122784,
|
|
|
0.140540,
|
|
|
0.158384,
|
|
|
0.176326, // 10
|
|
|
0.194380,
|
|
|
0.212556,
|
|
|
0.230868,
|
|
|
0.249328,
|
|
|
0.267949, // 15
|
|
|
0.286745,
|
|
|
0.305730,
|
|
|
0.324919,
|
|
|
0.344327,
|
|
|
0.363970, // 20
|
|
|
0.383864,
|
|
|
0.404026,
|
|
|
0.424474,
|
|
|
0.445228,
|
|
|
0.466307, // 25
|
|
|
0.487732,
|
|
|
0.509525,
|
|
|
0.531709,
|
|
|
0.554309,
|
|
|
0.577350, // 30
|
|
|
0.600840,
|
|
|
0.624869,
|
|
|
0.649407,
|
|
|
0.674508,
|
|
|
0.700207, // 35
|
|
|
0.726542,
|
|
|
0.753554,
|
|
|
0.781285,
|
|
|
0.809784,
|
|
|
0.839099,
|
|
|
0.869286,
|
|
|
0.900400,
|
|
|
0.932515,
|
|
|
0.965688,
|
|
|
1};
|
|
|
|
|
|
int rangeAngle(int angle, int min, int max)
|
|
|
{
|
|
|
while (angle < min)
|
|
|
angle += (max - min);
|
|
|
while (angle > max)
|
|
|
angle -= (max - min);
|
|
|
return angle;
|
|
|
}
|
|
|
|
|
|
float fast_sin(int angle)
|
|
|
{
|
|
|
angle = rangeAngle(angle, 0, 360);
|
|
|
|
|
|
if (angle >= 0 && angle <= 90)
|
|
|
return SinCosTable[angle][0];
|
|
|
else if (angle >= 90 && angle <= 180)
|
|
|
return SinCosTable[180 - angle][0];
|
|
|
else if (angle >= 180 && angle <= 270)
|
|
|
return -SinCosTable[angle - 180][0];
|
|
|
else
|
|
|
return -SinCosTable[360 - angle][0];
|
|
|
}
|
|
|
|
|
|
float fast_cos(int angle)
|
|
|
{
|
|
|
angle = rangeAngle(angle, 0, 360);
|
|
|
|
|
|
if (angle >= 0 && angle <= 90)
|
|
|
return SinCosTable[angle][1];
|
|
|
else if (angle >= 90 && angle <= 180)
|
|
|
return -SinCosTable[180 - angle][1];
|
|
|
else if (angle >= 180 && angle <= 270)
|
|
|
return -SinCosTable[angle - 180][1];
|
|
|
else
|
|
|
return SinCosTable[360 - angle][1];
|
|
|
}
|
|
|
|
|
|
float fast_tan(int angle)
|
|
|
{
|
|
|
// return SinCosTable[angle][0]/SinCosTable[angle][1];
|
|
|
return tanTable[angle];
|
|
|
}
|