搜索
bottom↓
回复: 8

求ATAN2_16bit函数代码(最好是查表法)

[复制链接]

出0入0汤圆

发表于 2014-11-22 20:50:52 | 显示全部楼层 |阅读模式
找到一个 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;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-11-23 13:18:00 | 显示全部楼层
cordic atan2

出0入0汤圆

发表于 2014-11-23 13:19:18 | 显示全部楼层
http://www.amobbs.com/forum.php? ... mp;highlight=cordic

出0入0汤圆

 楼主| 发表于 2014-11-23 14:25:39 | 显示全部楼层
again 发表于 2014-11-23 13:19
http://www.amobbs.com/forum.php?mod=viewthread&tid=3795383&highlight=cordic

那个好像使用 DSP计算,我的 CPU没有 DSP...

出20入25汤圆

发表于 2014-11-23 14:40:21 | 显示全部楼层
不需要DSP,知道原理就相当简单。整数加减与移位就可以了

出0入0汤圆

 楼主| 发表于 2014-11-23 20:46:05 | 显示全部楼层
chenchaoting 发表于 2014-11-23 14:40
不需要DSP,知道原理就相当简单。整数加减与移位就可以了

那楼上的范例表是怎么产生的?

出20入25汤圆

发表于 2014-11-23 21:11:57 | 显示全部楼层
你说的是again 网友说的表么?那个表分别是arctan(1),arctan(0.5),arctan(0.25)......括号中以2为除数类推。。。总结起来cordid 求arctan就是输入给定一个坐标(X,Y),通过这个表加或者减得到角度,与此同时X,Y也在加或者减,直到坐标的点Y为0,此时通过表的加减的和即为arctan的值

出0入0汤圆

 楼主| 发表于 2014-11-24 11:27:52 | 显示全部楼层
chenchaoting 发表于 2014-11-23 21:11
你说的是again 网友说的表么?那个表分别是arctan(1),arctan(0.5),arctan(0.25)......括号中以2为除数类推 ...

谢谢++
我想知道这个表是怎么产生的?是否能产生 1024的?
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
    };

出0入0汤圆

发表于 2014-11-24 16:35:18 | 显示全部楼层
不错,收了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 04:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表