在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);
我想从正弦曲线得到一个在 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);