Cで正弦曲線を計算する
正弦曲線から0と指定された高さ(私の場合は40)の間を移動する周期値を取得したいと思います。
しかし、私の価値は予想される40ではなく79にまで達するため、何かを台無しにしています。何が間違っているのでしょうか。
これは私の試みです:
#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;
}
回答
2 chux-ReinstateMonica
直接的な解決策は、波の大きさを2で割ることです@Eric Postpischil
// int value = height + sin(degToRad(i / 2 + 1)) * height;
int value = height + sin(degToRad(i / 2 + 1)) * height)/2;
i/2
除算で浮動小数点演算を使用します。@bruno
浮動小数点からに移行する切り捨て(OPのコードが行うこと)ではなく、丸めを使用すると、より許容できる結果が得られると思いint
ます。
int value = height + lround(sin(degToRad(i / 2 + 1)) * height)/2);
2 Hi-IloveSO
その場合、曲線の振幅はであり、そうでは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]の範囲にあるということです。