打印
[新唐博主]

C语言实现 sin 和 cos 功能

[复制链接]
1566|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-11-16 14:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
函数介绍
C 库函数 - sin()
C 标准库 - <math.h>
描述
C 库函数 double sin(double x) 返回弧度角 x 的正弦。
声明
下面是 sin() 函数的声明。
double sin(double x)
参数
x – 浮点值,代表了一个以弧度表示的角度。
返回值
该函数返回 x 的正弦。

C 库函数 - cos()
C 标准库 - <math.h>
描述
C 库函数 double cos(double x) 返回弧度角 x 的余弦。
声明
下面是 cos() 函数的声明。
double cos(double x)
参数
x – 浮点值,代表了一个以弧度表示的角度。
返回值
该函数返回 x 的余弦。

注意:
这里需要注意的是:这两个C库函数的 参数是弧度

而手机计算器里的 sin cos 的参数单位是 角度

弧度和角度单位换算:
参看:日常生活小技巧 – 单位换算

1弧度(rad) = 180/PI 度(deg) = 57.29577951308232 度(deg)
1度(deg) = PI/180 弧度(rad) = 0.017453292519943 弧度(rad)

C语言实现 sinf 和 cosf 功能
#define PI                  (3.1415926F)
#define D_PI                (6.2831852F)
#define TINY_VALUE              (1e-3f) // computation accuracy


/** -----------------------------------------------------------------------------------------------
@brief         absolute value function
@param[in]     float x - input number
@return        float result - absolute value of input data.
*//*---------------------------------------------------------------------------------------------*/
static inline float MyFabs(float x)
{
    return (x > 0.0f) ? x : -x;
}


/** -----------------------------------------------------------------------------------------------
@brief         sine calculation function
@param[in]     float x - input number
@return        float sum -result
*//*---------------------------------------------------------------------------------------------*/
float MySinf(float x)
{
    float n,sum,x2,temp;
    int32_t i, m;

    /* the period of sine fucntion is 2*PI */
    m = (int32_t)(x / D_PI);
    x = x - D_PI * m;

    n = x;
    sum = 0.0f;
    i = 1;
    x2 = x * x;
    /* Taylor expansion*/
    do
    {
        sum += n;
        i++;
        temp = -n * x2;
        n = temp / (((i << 2) - 6) * i + 2);  // n = temp / (2*i - 1) / (2*i - 2);
    } while (MyFabs(n)>=TINY_VALUE);

    return sum;
}

/** -----------------------------------------------------------------------------------------------
@brief         cosine calculation function
@param[in]     float x - input number
@return        float result
*//*---------------------------------------------------------------------------------------------*/
inline float MyCosf(float x)
{
    return MySinf(PI/2.0f-x);
}

————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/132878119

使用特权

评论回复
沙发
szt1993| | 2023-11-23 15:28 | 只看该作者
通过调整sin和cos函数的参数,可以实现物体的旋转、平移等操作

使用特权

评论回复
板凳
天灵灵地灵灵| | 2023-11-23 22:19 | 只看该作者
猜猜底层是如何实现的,是用傅里叶级数还是用别的技术?

使用特权

评论回复
地板
guijial511| | 2023-11-24 08:09 | 只看该作者
单片机搞数学函数没有FPU加持的话,运算太拉夸了。

使用特权

评论回复
5
Jacquetry| | 2023-11-25 08:54 | 只看该作者
加入math库

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2022

主题

15893

帖子

13

粉丝