Qt----------嵌入式系统的三角函数C实现

在小型嵌入式系统中,用到sin,cos等三角函数时,不能象在pc上编程般运用math库来实现,若没有浮点运算器,也不能运用泰勒公式展开来计算三角函数值。本文提供一种简单的查表法来计算。


文件i_sin.h中,保存了0-90度角的sin值向左位移15后的结果。对每个角度的三角函数做运算时,以角度为小标在sin_map表中查找相应的sin值(位移后的结果)。之所以要对sin值向左位移,是保证可以用整数来表达sin值。位移的大小(本文中为15),标称了sin值取值的精度,越大,sin值取值越精确。


文件i_sin.h中,提供了两个三角函数的计算宏:

rsin(_r_, _d_),

rcos(_r_, _d_),

参数_r_表示得到的sin或是cos值扩大的倍数;

参数_d_表示角度值。


实现比较简单,不再冗述。



附h文件如下:

/******************************************************************
 *
 * File Name:        pw_sin.h
 * Description:     The sin() function map. Using it to calculate a 
 *                          angle's sine value and cosine value. 
 *                         e.g. 
 *                         angle d=30 degrees, 
 *                         sin(d) = (sin_map[30] >> SIN_MAP_SHIFT)
 *                         result: sin(30) = 0.5
 *                  
 * Author :         Jiang Peifu
 * Date:             2009.04.27
 */
#ifndef PW_SIN_H
#define PW_SIN_H
/* -------------------------------------------------------------------------- */
#define SIN_MAP_SHIFT 15
#define DEGREE_MIN 0
#define DEGREE_MAX 90
#define SIN_MAP_SIZE (DEGREE_MAX - DEGREE_MIN + 1)
#define rsin(_r_, _d_) ((_r_ * sin_map[_d_] + 0x4000) >> SIN_MAP_SHIFT)
#define rcos(_r_, _d_) ((_r_ * sin_map[DEGREE_MAX-_d_] + 0x4000) >> SIN_MAP_SHIFT)
int sin_map[SIN_MAP_SIZE] = {
    0, 
    572, 
    1144, 
    1715, 
    2286, 
    2856, 
    3425, 
    3993, 
    4560, 
    5126, 
    5690, 
    6252, 
    6813, 
    7371, 
    7927, 
    8481, 
    9032, 
    9580, 
    10126, 
    10668, 
    11207, 
    11743, 
    12275, 
    12803, 
    13328, 
    13848, 
    14365, 
    14876, 
    15384, 
    15886, 
    16384, 
    16877, 
    17364, 
    17847, 
    18324, 
    18795, 
    19261, 
    19720, 
    20174, 
    20622, 
    21063, 
    21498, 
    21926, 
    22348, 
    22763, 
    23170, 
    23571, 
    23965, 
    24351, 
    24730, 
    25102, 
    25466, 
    25822, 
    26170, 
    26510, 
    26842, 
    27166, 
    27482, 
    27789, 
    28088, 
    28378, 
    28660, 
    28932, 
    29197, 
    29452, 
    29698, 
    29935, 
    30163, 
    30382, 
    30592, 
    30792, 
    30983, 
    31164, 
    31336, 
    31499, 
    31651, 
    31795, 
    31928, 
    32052, 
    32166, 
    32270, 
    32365, 
    32449, 
    32524, 
    32588, 
    32643, 
    32688, 
    32723, 
    32748, 
    32763, 
    32768, 
};
#endif /* PW_SIN_H */

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值