【原】C# 语言sin和cos函数的实现 -- 可以用于帧同步的sin查表算法
(2016-06-28 17:24:02)
标签:
sin查表算法c帧同步 |
分类: 一般编程基础 |
不多说了,直接贴代码:
class
TrigonometricFunction
{
protected static int TAB_N =
256;
//定义查表的点数
{
if
(_Instance == null)
{
_Instance = new
TrigonometricFunction();
}
return
_Instance;
}
{
SIN_TAB.Add(0);
SIN_TAB.Add(245);
SIN_TAB.Add(491);
SIN_TAB.Add(735);
SIN_TAB.Add(980);
SIN_TAB.Add(1224);
SIN_TAB.Add(1467);
SIN_TAB.Add(1710);
SIN_TAB.Add(1951);
SIN_TAB.Add(2191);
SIN_TAB.Add(2430);
SIN_TAB.Add(2667);
SIN_TAB.Add(2903);
SIN_TAB.Add(3137);
SIN_TAB.Add(3369);
SIN_TAB.Add(3599);
SIN_TAB.Add(3827);
SIN_TAB.Add(4052);
SIN_TAB.Add(4276);
SIN_TAB.Add(4496);
SIN_TAB.Add(4714);
SIN_TAB.Add(4929);
SIN_TAB.Add(5141);
SIN_TAB.Add(5350);
SIN_TAB.Add(5556);
SIN_TAB.Add(5758);
SIN_TAB.Add(5957);
SIN_TAB.Add(6152);
SIN_TAB.Add(6344);
SIN_TAB.Add(6532);
SIN_TAB.Add(6716);
SIN_TAB.Add(6895);
SIN_TAB.Add(7071);
SIN_TAB.Add(7242);
SIN_TAB.Add(7410);
SIN_TAB.Add(7572);
SIN_TAB.Add(7730);
SIN_TAB.Add(7883);
SIN_TAB.Add(8032);
SIN_TAB.Add(8176);
SIN_TAB.Add(8315);
SIN_TAB.Add(8449);
SIN_TAB.Add(8577);
SIN_TAB.Add(8701);
SIN_TAB.Add(8819);
SIN_TAB.Add(8932);
SIN_TAB.Add(9040);
SIN_TAB.Add(9142);
SIN_TAB.Add(9239);
SIN_TAB.Add(9330);
SIN_TAB.Add(9415);
SIN_TAB.Add(9495);
SIN_TAB.Add(9569);
SIN_TAB.Add(9638);
SIN_TAB.Add(9700);
SIN_TAB.Add(9757);
SIN_TAB.Add(9808);
SIN_TAB.Add(9853);
SIN_TAB.Add(9892);
SIN_TAB.Add(9925);
SIN_TAB.Add(9952);
SIN_TAB.Add(9973);
SIN_TAB.Add(9988);
SIN_TAB.Add(9997);
SIN_TAB.Add(10000);
}
public static FPoint Sin(FPoint pi)
{
TrigonometricFunction fuc = TrigonometricFunction.Instance();
int n =
0;
int a =
0;
int TAB_N
= TrigonometricFunction.TAB_N;
List
SIN_TAB = TrigonometricFunction.SIN_TAB;
n = (pi *
TAB_N / 2 / PI).ToInt();
// SIN_TAB[i] = sin(2*PI*i/TAB_N);
if (n
>= 0 && n <= TAB_N / 4)
// 0 ~ PI/2
{
a = SIN_TAB[n];
}
else if (n
> TAB_N / 4 && n < TAB_N / 2)
// PI/2 ~ PI
{
n -= TAB_N / 4;
a = SIN_TAB[TAB_N / 4 -
n];
}
else if (n
>= TAB_N / 2 && n < 3 * TAB_N / 4)
// PI ~ 3/4*PI
{
n -= TAB_N / 2;
a = -SIN_TAB[n];
}
else if (n
>= 3 * TAB_N / 4 && n < TAB_N)
// 3/4*PI ~ 2*PI
{
n = TAB_N - n;
a = -SIN_TAB[n];
}
FPoint ret
= new FPoint(a);
ret = ret
* 0.0001f;
return
ret;
}
public static FPoint Cos(FPoint pi)
{
FPoint PI
= TrigonometricFunction.PI;
FPoint pi2
= pi + PI / 2;
if (pi2
> 2 * PI)
pi2 -= 2 * PI;
FPoint a =
TrigonometricFunction.Sin(pi2);
return
a;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FP;
namespace FP
{
protected static FPoint PI = new
FPoint(3.14159265f);
//定义圆周率值
protected static List SIN_TAB = new List();
protected static TrigonometricFunction _Instance = null;
protected static TrigonometricFunction Instance()
protected TrigonometricFunction()
}