在C中计算正弦曲线

Calculate sine curve in C

我想从正弦曲线得到一个在 0 和指定高度(在我的例子中是 40)之间移动的周期值。

但是我把事情搞砸了,因为我的值一直到 79 而不是预期的 40。我做错了什么?

这是我的尝试:

#include <math.h>

    #define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
    
    int main()
    {  
        int height = 40;
        int i = 0;
        while (1) {
    
            int value = height + sin(degToRad(i / 2 + 1)) * height;
            printf("val = %i\n", value);
            i++;
        }
        return 0;
    }

曲线的振幅将是 height / 2 而不是 height;只需替换

int value = height + sin(degToRad(i / 2 + 1)) * height;

int value = height / 2 + sin(degToRad(i / 2 + 1)) * height / 2;

记住这一点的一个好方法是 sin x 始终在 [-1, 1] 范围内。

直接解决方法是将波幅除以 2

// int value = height + sin(degToRad(i / 2 + 1)) * height; 
int value = height + sin(degToRad(i / 2 + 1)) * height)/2;

并在 i/2 部分使用浮点数学。


我希望使用舍入而不是截断(OP 的代码所做的)从浮点数到 int

会得到更可接受的结果
int value = height + lround(sin(degToRad(i / 2 + 1)) * height)/2);