• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: atan2查表  算法  

资源简介

atan2的查表法实现,支持宏定义调整精度,非常适合没有带FPU的MCU使用。

资源截图

代码片段和文件信息

// ConsoleApplication4.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

typedef float float32_t;

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

#include “atan2_tab.h“

int main()
{

atan2_tab_init();

double res_lib;
double res_tab;
#define LUT_NUM 4096
#define PRICISION 0.001
for (int i = 0; i < LUT_NUM; i++)
{
//第一象限
res_lib = atan2(i (LUT_NUM - 1));
res_tab = atan2_tab_calc(i (LUT_NUM - 1));
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第一象限x=%d y=%d\n diff:%.5f“ (LUT_NUM - 1) i fabs(res_lib - res_tab));
}
res_lib = atan2((LUT_NUM - 1) i);
res_tab = atan2_tab_calc((LUT_NUM - 1) i);
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第一象限x=%d y=%d diff:%.5f\n“ i (LUT_NUM - 1) fabs(res_lib - res_tab));
}

//第二象限
res_lib = atan2(i -(LUT_NUM - 1));
res_tab = atan2_tab_calc(i -(LUT_NUM - 1));
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第二象限x=%d y=%d diff:%.5f\n“ -(LUT_NUM - 1) i fabs(res_lib - res_tab));
}
res_lib = atan2((LUT_NUM - 1) -i);
res_tab = atan2_tab_calc((LUT_NUM - 1) -i);
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第二象限x=%d y=%d diff:%.5f\n“ -i (LUT_NUM - 1) fabs(res_lib - res_tab));
}

//第三象限
res_lib = atan2(-i -(LUT_NUM - 1));
res_tab = atan2_tab_calc(-i -(LUT_NUM - 1));
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第三象限x=%d y=%d diff:%.5f\n“ -(LUT_NUM - 1) -i fabs(res_lib - res_tab));
}
res_lib = atan2(-(LUT_NUM - 1) -i);
res_tab = atan2_tab_calc(-(LUT_NUM - 1) -i);
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“第三象限x=%d y=%d diff:%.5f\n“ -i  -(LUT_NUM - 1) fabs(res_lib - res_tab));
}

//第四象限
res_lib = atan2(-i (LUT_NUM - 1));
res_tab = atan2_tab_calc(-i (LUT_NUM - 1));
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“1第四象限x=%d y=%ddiff:%.5f\n“ (LUT_NUM - 1) -i fabs(res_lib - res_tab));
}
res_lib = atan2(-(LUT_NUM - 1) i);
res_tab = atan2_tab_calc(-(LUT_NUM - 1) i);
if (fabs(res_lib - res_tab) > PRICISION)
{
printf(“2第四象限x=%d y=%d diff:%.5f\n“ -i (LUT_NUM - 1) fabs(res_lib - res_tab));
res_lib = atan2(-(LUT_NUM - 1) i);
res_tab = atan2_tab_calc(-(LUT_NUM - 1) i);
}

res_lib = atan2((LUT_NUM - 1) -4094);
res_tab = atan2_tab_calc((LUT_NUM - 1) -4094);;

res_lib = atan2(-(LUT_NUM - 1) 208);
res_tab = atan2_tab_calc(-(LUT_NUM - 1) 208);
}


system(“pause“);



return 0;
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2866  2018-10-13 18:45  atan2_lut_test.cpp
     文件        2404  2018-10-13 18:39  atan2_tab.cpp
     文件         822  2018-10-13 18:39  atan2_tab.h

评论

共有 条评论