「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

Programming Interactivity #2 Studying Sin

プログラミングしているとsin関数は、いろんなところで出てくるのだが、 いつも「ラジアンと度」の関係性に迷う。

数学的な面でラジアンと度との関係は分かっているし、 radian = x * PI / 180 という関係も、理解している。

では何を理解していないのか?というと、 いろいろなサンプルプログラムなどを見ると、

sin関数に与える引数値として、float値を与えているところと、 それがラジアン値であるというところのイメージがわかなかったところ。

毎フレーム毎にsin関数の引数に例えば、+=0.5等としているのをよく見るのだが、 ???

やはり慣れている「度」で、まず考えてみてみたら、 少々もやもやしたのが晴れた。(気がしている)

// x 度
// sin関数の引数にはラジアンを与えるので、
// ラジアンに変換
float rad = 0.0;
for (int i = 0; i < 360; i++) {
rad = x * PI / 180;
y[i] = sin(rad);
x += 1;
}

として、y値を求めると、予想通りの値が出ます。 ただ、xを度として、ラジアン変換した場合、 変化量が少なくなるため、この方法だと、ビジュアライズなどに適用するには、 見た目的に、わかりにくい。

そこで、x値をラジアンとして、そのまま使う人の方が多い気がする。

float x = 0.0f;
for (int i = 0; i < 360; i++) {
y[i] = sin(x);
x += 1;
}

これを参考に、マウスのx座標を元にサインカーブを表現するものを作成してみた。

Sinwave Study from Kazuyoshi Ueno on Vimeo.