Edited at

値が増加し続ける三角関数

ずっと増え続けるSin関数 - Google スプレッドシート - Google Chrome 2019-01-11 14.57.57.png

いきなりですが、上の図の様に値がなめらかに増え続けるSin関数欲しいと思ったことはありませんか。

私はあります。

意外と無いものなので自作しました。すでにあったらごめんなさい。

関数名がダサいのとMathfの拡張メソッドになってないのでそこら辺は適当でお願いします。


esin.cs

    float ESin(float rad){

float HALF_PI = 0.5f*Mathf.PI;
int num = Mathf.FloorToInt( rad / HALF_PI );
if ( (num & 1) == 0 ){
return num + Mathf.Sin( Mathf.Repeat(rad, HALF_PI) );
}
else{
return num + (1.0f+Mathf.Sin( Mathf.Repeat(rad,HALF_PI)+1.5f*Mathf.PI ));
}
}

やってることは0.5PIから1.5PIにラジアンを飛ばすことでSin関数をなめらかにつなげつつ、0.5PI毎に値が増えるようにしています。

Unityなどで歩きの様に振動しながら増え続ける物に使うとそれっぽく動きます。

三角関数の周期を使っているので、上下動に三角関数使って同期させたり任意の時間で特定の位置まで線形補間するみたいな用途にも使えるので割と便利だと思います。