過去ブログの転載です。
減衰振動とは、その名の通り減衰していく振動のことです。
定数を用いて、
と表わされます。
グラフはこんなかんじです。時間とともに減衰していく様子が確認できますね。この振動は一見すると物々しいもののようですが、実はかわいいのです。見てください。
ふわっと膨らんでしぼんでぶるぶるするのです。いいでしょう。ゲーム作りで使いたくなってきますよね。使ってるのは正弦関数と指数関数なので、ツクール2000でも使えそうです。
減衰振動のパラメータは多いので、どういうときにどうしたらいいかをまとめました。:
のときになる値。振動が減衰しきって落ち着いたときの値ですね。
:減衰振動そのものの大きさ。大きいほど激しい振動になります。
:減衰スピード。大きいほど速く減衰が終わります。小さくすればなかなか減衰しない。
:振動スピード。大きいほど一回一回の振動が速くなります。
:初期位相。振動のズレです。必要であれば設定していいと思いますが、基本的に0でいいです。
一番いいのは、てきとうな値にして試行錯誤することでしょうね。何か条件でも入れて計算すればそれっぽいのは求まりますが、めんどくさそうです。
減衰振動の場合分けと終了条件(収束判定)
以下では、パラメータによる減衰振動の場合分けと、減衰振動が止まるための条件について考察します。終了条件がわからないと困る場面もそこそこあるので、求められるようにしておきましょう。
ただし終了条件といっても、本来はいつまでも減衰し続けるので、減衰が止まることはありません。そこで、振動の幅がある値以下になったら止まったと判定することにします。
例えばピクセル単位の画像の移動に減衰振動を使うとしたら、1ピクセル以下の振動になったらもう振動してないのと同じですから、とすればいいのです。
また、終了したと判定するための時間をとします。
となったら減衰終了で
となります。
要するに減衰振動の収束判定を考えます。
パターン1:何もなし(a=0またはc=d=0のとき)
か
のときは
になってしまうので、これは何も起きません。
であり、常に
です。これは考える価値はありません。
パターン2:非減衰な振動(パターン1ではないが、b=0のとき)
減衰の部分がなくなって、となります。これはただの振動です。減衰しないので、振動は永遠に続きます。つまり、
となります。これはこれで使いますけど、ここであえて言及することは特にありません。
パターン3:減衰するだけ(パターン1, 2ではないが、c=0のとき)
今度は逆に減衰するけど振動はしないパターンです。となります。
が掛かってますが、これは
が入ってないただの定数なので、実質
が係数で減衰し続けるだけになります。減衰が終わると
となります。
減衰が終わる条件を求めてみましょう。減衰項による変化が以下になったら終了と判定します。すなわち、
となるときの最低の
を
とします。
となります。これ以降のなら常に
以下になるので、
ということになります。
なら
と見なせるわけですね。
パターン4:減衰振動(パターン1, 2, 3のどれでもない)
これがホントの減衰振動です。です。
減衰振動ではより大きくなって、小さくなって、を繰り返していて、この振動の最中に突然
になったら不自然ですから、大きくなるのと小さくなるのの間となる、振動のない瞬間に止めることを考えましょう。
ということで、まずはとなるときの条件を求めます。
は0になることはないので、
となるときですね。つまり整数
を用いて
と表されるときです。そのときの
は、
となります。
整数は任意ですが、
のとき常に
以下になるような整数
を考えます。すなわち、
となるようにします。この
を求めましょう。
振動に関わらず、減衰部分だけ考えてとなるときの
を求めてみます。
となるので、右辺と一致するようなtになるときのを求めます。
が成り立つということです。
となりました。このを超えるような
であれば常に
以下になるので、これの切り上げという意味で、次のようにして
を決めます。
は小数点以下切り捨てです。切り上げは何かと使いづらいので1足して切り捨てました。厳密には切り上げじゃないので無駄があるのですが、とりあえず
をこのように決めれば常に
以下になります。
従って、として
として求まるときの
より
が大きければ減衰振動が終了したと判定できます。