• ベストアンサー

サインカーブを計算したい

サインカーブ(正弦波)の計算をしたいと思います やりたいことは以下のとおりです  イ.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) {  (計算式) } 私の頭では計算できません どうか、お力をお貸しください

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 訂正  127.5 * sin(2 * PI * y / x) + 127.5  

zero-spica
質問者

お礼

ご回答、ありがとうございます! 別の問題にあたってしまいましたが、私ではこの式にはたどり着けないので大変助かりました

その他の回答 (2)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

おおむね回答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;」は不要

zero-spica
質問者

お礼

ご指摘のとおり、 math.h をインクルードして計算式を利用させていただくことにします 本当に助かりました、ありがとうございます!

回答No.1

   255 * sin(2 * PI * y / x) + 127.5  

関連するQ&A