プロが教えるわが家の防犯対策術!

サインカーブ(正弦波)の計算をしたいと思います
やりたいことは以下のとおりです

 イ.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)
{

 (計算式)

}


私の頭では計算できません
どうか、お力をお貸しください

「サインカーブを計算したい」の質問画像

A 回答 (3件)

 訂正


 127.5 * sin(2 * PI * y / x) + 127.5
 
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/27 10:57

おおむね回答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;」は不要
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/02/27 10:59

 


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!