- ベストアンサー
サインカーブを計算したい
サインカーブ(正弦波)の計算をしたいと思います やりたいことは以下のとおりです イ.0~255段階の振幅がある ロ.1振幅の時間軸を調整できるようにし、その数値にあわせて1回の振幅をする ハ.たとえば、127に設定すると、127カウントで一回の振幅がある ニ.たとえば、127に設定した場合、0から127の任意の場所の振幅のレベルを取り込みたい 補足 1カウントあたりの時間軸は固定です 1振幅の時間軸を127に設定している場合、0~127の数値を順に読み取りながら出力すれば1振幅し、これを繰り返し行うことで正弦波となる 時間軸をたとえば255に設定すると、周波数は2倍になる 分かりにくいと思いますが、これをC言語で計算しようとすると、どういうプログラムになるのでしょうか? 1振幅の時間軸をX、取り出したい時間軸の位置をYとしてお願いします 以下のプログラムで正弦波になると思います int i = 0; //カウンター用 z = 128; //1振幅の時間軸(127) main() { while(1) { print get(z, i); i++; if (i == z) i = 0; } } void get(int x, int y) { (計算式) } 私の頭では計算できません どうか、お力をお貸しください
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
訂正 127.5 * sin(2 * PI * y / x) + 127.5
その他の回答 (2)
- mtaka2
- ベストアンサー率73% (867/1179)
おおむね回答2でいいですが、正確には 127.5 * sin(2 * M_PI * y / x) + 127.5 じゃないかな。 関数 sin、定数 M_PI は math.h に宣言/定義されているので、#inlude <math.h> を忘れないこと あと、sin は周期関数なので、関数getの引数yは 0~x-1に収まって無くても問題ないです。「if (i == z) i = 0;」は不要
お礼
ご指摘のとおり、 math.h をインクルードして計算式を利用させていただくことにします 本当に助かりました、ありがとうございます!
- yaemon_2006
- ベストアンサー率22% (50/220)
255 * sin(2 * PI * y / x) + 127.5
お礼
ご回答、ありがとうございます! 別の問題にあたってしまいましたが、私ではこの式にはたどり着けないので大変助かりました